< Module exactEval:translation.
< Prove_Constraint exactEval:host:proj_expr_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_expr_is. Proof completed.
< Prove_Constraint exactEval:host:proj_expr_other. Proof completed.
< Prove_Constraint exactEval:host:proj_stmt_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_stmt_is. Proof completed.
< Prove_Constraint exactEval:host:proj_stmt_other. Proof completed.
< Prove_Constraint exactEval:host:proj_fun_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_fun_is. Proof completed.
< Prove_Constraint exactEval:host:proj_param_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_param_is. Proof completed.
< Prove_Constraint exactEval:host:proj_program_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_program_is. Proof completed.
< Prove_Constraint exactEval:host:proj_typ_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_typ_is. Proof completed.
< Add_Proj_Rel exactEval:host:is_expr, exactEval:host:is_args, exactEval:host:is_recFieldExprs, exactEval:host:is_stmt. Proof completed.
< Prove_Ext_Ind exactEval:host:is_expr, exactEval:host:is_args, exactEval:host:is_recFieldExprs, exactEval:host:is_stmt. Warning: No definition of Ext Size for all relations in Ext Ind; defaulting to proving Ext Ind without Ext Size Proof completed.
< Prove exactEval:host:is_args_nilArgs_or_consArgs. Proof completed.
< Prove exactEval:host:is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs. Proof completed.
< Prove exactEval:host:vars_unique. Proof completed.
< Prove exactEval:host:vars_is. Proof completed.
< Prove exactEval:host:vars_exist, exactEval:host:varsArgs_exist, exactEval:host:varsRecFields_exist. Proof completed.
< Prove exactEval:host:stmtNames_is, exactEval:host:stmtNames_isCtx, exactEval:host:exprNames_is. Proof completed.
< Prove exactEval:host:stmtNames_unique, exactEval:host:exprNames_unique. Proof completed.
< Prove exactEval:host:stmtNames_keep_older. Proof completed.
< Prove exactEval:host:stmtNames_exists, exactEval:host:exprNames_exists, exactEval:host:argsNames_exists, exactEval:host:recFieldNames_exists. Proof completed.
< Prove exactEval:host:stmtNames_not_in_ctx, exactEval:host:exprNames_not_in_ctx. Proof completed.
< Prove exactEval:host:stmtNames_relatedCtxs, exactEval:host:stmtNames_relatedCtxs_ctx_fwd, exactEval:host:stmtNames_relatedCtxs_ctx_back, exactEval:host:exprNames_relatedCtxs. Proof completed.
< Prove exactEval:host:stmtNames_increaseCtxs, exactEval:host:stmtNames_increaseCtxs_ctxs, exactEval:host:exprNames_increaseCtxs. Proof completed.
< Prove_Constraint exactEval:host:proj_exprNames. Proof completed.
< Prove_Constraint exactEval:host:proj_stmtNames. Proof completed.
< Prove_Constraint exactEval:host:proj_stmtNames_names_forward. Proof completed.
< Prove_Constraint exactEval:host:proj_stmtNames_names_backward. Proof completed.
< Prove exactEval:host:typeOf_isTy, exactEval:host:stmtOK_isCtx. Proof completed.
< Prove exactEval:host:stmtOK_keep_scopes. Proof completed.
< Prove exactEval:host:stmtOK_older_scopes_same. Proof completed.
< Prove exactEval:host:stmtOK_first_scope_lookup_same. Proof completed.
< Prove exactEval:host:typeOf_unique, exactEval:host:stmtOK_unique. Proof completed.
< Prove exactEval:host:paramTy_is. Proof completed.
< Prove exactEval:host:getFunInfo_is. Proof completed.
< Prove exactEval:host:paramTy_exists. Proof completed.
< Prove exactEval:host:getFunInfo_exists. Proof completed.
< Prove exactEval:host:evalExpr_isCtx, exactEval:host:evalExpr_isValue, exactEval:host:evalStmt_isCtx, exactEval:host:evalArgs_isCtx, exactEval:host:evalArgs_isValue, exactEval:host:evalRecFields_isCtx, exactEval:host:evalRecFields_isValue. Proof completed.
< Prove exactEval:host:evalExpr_isOutput, exactEval:host:evalStmt_isOutput, exactEval:host:evalArgs_isOutput, exactEval:host:evalRecFields_isOutput. Proof completed.
< Prove exactEval:host:paramName_is. Proof completed.
< Prove exactEval:host:getFunEvalInfo_is. Proof completed.
< Prove exactEval:host:evalProgram_isOutput. Proof completed.
< Prove exactEval:host:evalExpr_names_same, exactEval:host:evalStmt_names_same, exactEval:host:evalArgs_names_same, exactEval:host:evalRecFields_names_same. Proof completed.
< Prove exactEval:host:evalExpr_newNameScopes, exactEval:host:evalExpr_newNameScopes_output, exactEval:host:evalExpr_newNameScopes_ctx, exactEval:host:evalStmt_newNameScopes_output, exactEval:host:evalStmt_newNameScopes, exactEval:host:evalArgs_newNameScopes, exactEval:host:evalArgs_newNameScopes_output, exactEval:host:evalArgs_newNameScopes_ctx, exactEval:host:evalRecFields_newNameScopes, exactEval:host:evalRecFields_newNameScopes_output, exactEval:host:evalRecFields_newNameScopes_ctx. Proof completed.
< Add_Ext_Size exactEval:host:evalExpr, exactEval:host:evalArgs, exactEval:host:evalRecFields, exactEval:host:evalStmt. Proof completed.
< Add_Proj_Rel exactEval:host:evalExpr, exactEval:host:evalArgs, exactEval:host:evalRecFields, exactEval:host:evalStmt. Proof completed.
< Prove exactEval:host:evalExpr_newNameScopes_exists_ES, exactEval:host:evalStmt_newNameScopes_exists_ES, exactEval:host:evalArgs_newNameScopes_exists_ES, exactEval:host:evalRecFields_newNameScopes_exists_ES. Proof completed.
< Prove exactEval:host:evalExpr_ctx_names, exactEval:host:evalStmt_ctx_names, exactEval:host:evalArgs_ctx_names, exactEval:host:evalRecFields_ctx_names. Proof completed.
< Prove exactEval:host:evalExpr_newNameScopes_exists_back, exactEval:host:evalStmt_newNameScopes_exists_back, exactEval:host:evalArgs_newNameScopes_exists_back, exactEval:host:evalRecFields_newNameScopes_exists_back. Proof completed.
< Prove exactEval:host:evalExpr_scopes_same, exactEval:host:evalExpr_scopes_same_ctx, exactEval:host:evalStmt_scopes_same, exactEval:host:evalStmt_scopes_same_ctx, exactEval:host:evalArgs_scopes_same, exactEval:host:evalArgs_scopes_same_ctx, exactEval:host:evalRecFields_scopes_same, exactEval:host:evalRecFields_scopes_same_ctx. Proof completed.
< Prove exactEval:host:evalExpr_scopes_same_exists, exactEval:host:evalStmt_scopes_same_exists, exactEval:host:evalArgs_scopes_same_exists, exactEval:host:evalRecFields_scopes_same_exists. Proof completed.
< Prove_Constraint exactEval:host:proj_evalExpr_forward. Proof completed.
< Prove_Constraint exactEval:host:proj_evalExpr_backward. Proof completed.
< Prove_Constraint exactEval:host:proj_evalStmt_forward. Proof completed.
< Prove_Constraint exactEval:host:proj_evalStmt_backward. Proof completed.
< Prove_Ext_Ind exactEval:host:evalExpr, exactEval:host:evalArgs, exactEval:host:evalRecFields, exactEval:host:evalStmt. Proof completed.
< Prove exactEval:host:paramName_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_paramName_forward. Proof completed.
< Prove_Constraint exactEval:host:proj_paramName_back. Proof completed.
< Prove exactEval:host:getFunEvalInfo_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_getFunEvalInfo_forward. Proof completed.
< Prove_Constraint exactEval:host:proj_getFunEvalInfo_back. Proof completed.
< Prove exactEval:host:evalProgram_unique. Proof completed.
< Prove_Constraint exactEval:host:proj_evalProgram_forward. Proof completed.
< Prove_Constraint exactEval:host:proj_evalProgram_back. Proof completed.
< Prove exactEval:host:evalExpr_typePres_ctx, exactEval:host:evalExpr_typePres, exactEval:host:evalStmt_typePres, exactEval:host:evalArgs_typePres_Ctx, exactEval:host:evalArgs_typePres, exactEval:host:evalRecFields_typePres_Ctx, exactEval:host:evalRecFields_typePres. Proof completed.
< Prove exactEval:host:paramTy_paramName_same. Proof completed.
< Prove exactEval:host:funOK_getFunEvalInfo_related. Proof completed.
< Prove exactEval:host:evalExpr_output_forms, exactEval:host:evalStmt_output_forms, exactEval:host:evalArgs_output_forms, exactEval:host:evalRecFields_output_forms. Proof completed.
< Prove exactEval:host:evalProgram_output_forms. Proof completed.
< Prove exactEval:host:paramName_exists. Proof completed.
< Prove exactEval:host:getFunEvalInfo_exists. Proof completed.
< Theorem join_is : forall L J, is_list (is_list is_string) L -> join L J -> is_list is_string J. ============================ forall L J, is_list (is_list is_string) L -> join L J -> is_list is_string J
< induction on 2. IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J ============================ forall L J, is_list (is_list is_string) L -> join L J @ -> is_list is_string J
< intros Is J. Variables: L J IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J Is : is_list (is_list is_string) L J : join L J @ ============================ is_list is_string J
< J: case J. Subgoal 1: IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J Is : is_list (is_list is_string) [] ============================ is_list is_string []
< search. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J Is : is_list (is_list is_string) (S::SRest) J : join SRest Rest * J1 : S ++ Rest = J ============================ is_list is_string J
< case Is. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J J : join SRest Rest * J1 : S ++ Rest = J H1 : is_list is_string S H2 : is_list (is_list is_string) SRest ============================ is_list is_string J
< apply IH to _ J. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J J : join SRest Rest * J1 : S ++ Rest = J H1 : is_list is_string S H2 : is_list (is_list is_string) SRest H3 : is_list is_string Rest ============================ is_list is_string J
< apply append_list_string_is to _ _ J1. Subgoal 2: Variables: J Rest SRest S IH : forall L J, is_list (is_list is_string) L -> join L J * -> is_list is_string J J : join SRest Rest * J1 : S ++ Rest = J H1 : is_list is_string S H2 : is_list (is_list is_string) SRest H3 : is_list is_string Rest H4 : is_list is_string J ============================ is_list is_string J
< search. Proof completed.
< Extensible_Theorem transE_is : forall Names E T, IsE : is_expr E -> IsNames : is_list (is_list is_string) Names -> Trans : transE Names E T -> is_expr T on Trans as IH_E, transS_is : forall Names S T Names', IsS : is_stmt S -> IsNames : is_list (is_list is_string) Names -> Trans : transS Names S T Names' -> is_stmt T on Trans as IH_S, transS_isNames : forall Names S T Names', IsS : is_stmt S -> IsNames : is_list (is_list is_string) Names -> Trans : transS Names S T Names' -> is_list (is_list is_string) Names' on Trans as IH_S_Calso transA_is : forall Names A T, IsA : is_args A -> IsNames : is_list (is_list is_string) Names -> Trans : transA Names A T -> is_args T on Trans as IH_A, transRF_is : forall Names RF T, IsRF : is_recFieldExprs RF -> IsNames : is_list (is_list is_string) Names -> Trans : transRF Names RF T -> is_recFieldExprs T on Trans as IH_RF. Subgoal 1.1: Variables: Names I IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (num I) IsNames : is_list (is_list is_string) Names Trans : transE Names (num I) (num I) @ ============================ is_expr (num I)
< search. Subgoal 1.2: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (plus E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (plus E1 E2) (plus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (plus E11 E21)
< case IsE. Subgoal 1.2: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (plus E1 E2) (plus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (plus E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.2: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (plus E1 E2) (plus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (plus E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.2: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (plus E1 E2) (plus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (plus E11 E21)
< search. Subgoal 1.3: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (minus E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (minus E1 E2) (minus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (minus E11 E21)
< case IsE. Subgoal 1.3: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (minus E1 E2) (minus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (minus E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.3: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (minus E1 E2) (minus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (minus E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.3: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (minus E1 E2) (minus E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (minus E11 E21)
< search. Subgoal 1.4: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (mult E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (mult E1 E2) (mult E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (mult E11 E21)
< case IsE. Subgoal 1.4: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (mult E1 E2) (mult E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (mult E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.4: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (mult E1 E2) (mult E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (mult E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.4: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (mult E1 E2) (mult E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (mult E11 E21)
< search. Subgoal 1.5: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (div E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (div E1 E2) (div E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (div E11 E21)
< case IsE. Subgoal 1.5: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (div E1 E2) (div E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (div E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.5: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (div E1 E2) (div E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (div E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.5: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (div E1 E2) (div E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (div E11 E21)
< search. Subgoal 1.6: Variables: Names IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr true IsNames : is_list (is_list is_string) Names Trans : transE Names true true @ ============================ is_expr true
< search. Subgoal 1.7: Variables: Names IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr false IsNames : is_list (is_list is_string) Names Trans : transE Names false false @ ============================ is_expr false
< search. Subgoal 1.8: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (and E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (and E1 E2) (and E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (and E11 E21)
< case IsE. Subgoal 1.8: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (and E1 E2) (and E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (and E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.8: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (and E1 E2) (and E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (and E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.8: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (and E1 E2) (and E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (and E11 E21)
< search. Subgoal 1.9: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (or E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (or E1 E2) (or E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (or E11 E21)
< case IsE. Subgoal 1.9: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (or E1 E2) (or E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (or E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.9: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (or E1 E2) (or E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (or E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.9: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (or E1 E2) (or E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (or E11 E21)
< search. Subgoal 1.10: Variables: Names E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (not E1) IsNames : is_list (is_list is_string) Names Trans : transE Names (not E1) (not E2) @ Trans1 : transE Names E1 E2 * ============================ is_expr (not E2)
< case IsE. Subgoal 1.10: Variables: Names E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (not E1) (not E2) @ Trans1 : transE Names E1 E2 * H1 : is_expr E1 ============================ is_expr (not E2)
< apply IH_E to _ _ Trans1. Subgoal 1.10: Variables: Names E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (not E1) (not E2) @ Trans1 : transE Names E1 E2 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (not E2)
< search. Subgoal 1.11: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (greater E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (greater E1 E2) (greater E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (greater E11 E21)
< case IsE. Subgoal 1.11: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (greater E1 E2) (greater E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (greater E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.11: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (greater E1 E2) (greater E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (greater E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.11: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (greater E1 E2) (greater E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (greater E11 E21)
< search. Subgoal 1.12: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (eq E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (eq E1 E2) (eq E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (eq E11 E21)
< case IsE. Subgoal 1.12: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (eq E1 E2) (eq E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (eq E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.12: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (eq E1 E2) (eq E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (eq E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.12: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (eq E1 E2) (eq E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (eq E11 E21)
< search. Subgoal 1.13: Variables: Names S IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (stringLit S) IsNames : is_list (is_list is_string) Names Trans : transE Names (stringLit S) (stringLit S) @ ============================ is_expr (stringLit S)
< search. Subgoal 1.14: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (appString E1 E2) IsNames : is_list (is_list is_string) Names Trans : transE Names (appString E1 E2) (appString E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * ============================ is_expr (appString E11 E21)
< case IsE. Subgoal 1.14: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (appString E1 E2) (appString E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 ============================ is_expr (appString E11 E21)
< apply IH_E to _ _ Trans1. Subgoal 1.14: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (appString E1 E2) (appString E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 ============================ is_expr (appString E11 E21)
< apply IH_E to _ _ Trans2. Subgoal 1.14: Variables: Names E21 E11 E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (appString E1 E2) (appString E11 E21) @ Trans1 : transE Names E1 E11 * Trans2 : transE Names E2 E21 * H1 : is_expr E1 H2 : is_expr E2 H3 : is_expr E11 H4 : is_expr E21 ============================ is_expr (appString E11 E21)
< search. Subgoal 1.15: Variables: Names X IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (name X) IsNames : is_list (is_list is_string) Names Trans : transE Names (name X) (name X) @ ============================ is_expr (name X)
< search. Subgoal 1.16: Variables: Names A1 F A IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (call F A) IsNames : is_list (is_list is_string) Names Trans : transE Names (call F A) (call F A1) @ Trans1 : transA Names A A1 * ============================ is_expr (call F A1)
< case IsE. Subgoal 1.16: Variables: Names A1 F A IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (call F A) (call F A1) @ Trans1 : transA Names A A1 * H1 : is_string F H2 : is_args A ============================ is_expr (call F A1)
< apply IH_A to _ _ Trans1. Subgoal 1.16: Variables: Names A1 F A IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (call F A) (call F A1) @ Trans1 : transA Names A A1 * H1 : is_string F H2 : is_args A H3 : is_args A1 ============================ is_expr (call F A1)
< search. Subgoal 1.17: Variables: Names Names2 E2 S1 E1 S IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (stmtExpr S E1) IsNames : is_list (is_list is_string) Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @ Trans1 : transS ([]::Names) S S1 Names2 * Trans2 : transE Names2 E1 E2 * ============================ is_expr (stmtExpr S1 E2)
< case IsE. Subgoal 1.17: Variables: Names Names2 E2 S1 E1 S IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @ Trans1 : transS ([]::Names) S S1 Names2 * Trans2 : transE Names2 E1 E2 * H1 : is_stmt S H2 : is_expr E1 ============================ is_expr (stmtExpr S1 E2)
< apply IH_S to _ _ Trans1. Subgoal 1.17: Variables: Names Names2 E2 S1 E1 S IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @ Trans1 : transS ([]::Names) S S1 Names2 * Trans2 : transE Names2 E1 E2 * H1 : is_stmt S H2 : is_expr E1 H3 : is_stmt S1 ============================ is_expr (stmtExpr S1 E2)
< apply IH_S_C to _ _ Trans1. Subgoal 1.17: Variables: Names Names2 E2 S1 E1 S IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @ Trans1 : transS ([]::Names) S S1 Names2 * Trans2 : transE Names2 E1 E2 * H1 : is_stmt S H2 : is_expr E1 H3 : is_stmt S1 H4 : is_list (is_list is_string) Names2 ============================ is_expr (stmtExpr S1 E2)
< apply IH_E to _ _ Trans2. Subgoal 1.17: Variables: Names Names2 E2 S1 E1 S IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @ Trans1 : transS ([]::Names) S S1 Names2 * Trans2 : transE Names2 E1 E2 * H1 : is_stmt S H2 : is_expr E1 H3 : is_stmt S1 H4 : is_list (is_list is_string) Names2 H5 : is_expr E2 ============================ is_expr (stmtExpr S1 E2)
< search. Subgoal 1.18: Variables: Names RF1 RF IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (recBuild RF) IsNames : is_list (is_list is_string) Names Trans : transE Names (recBuild RF) (recBuild RF1) @ Trans1 : transRF Names RF RF1 * ============================ is_expr (recBuild RF1)
< case IsE. Subgoal 1.18: Variables: Names RF1 RF IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (recBuild RF) (recBuild RF1) @ Trans1 : transRF Names RF RF1 * H1 : is_recFieldExprs RF ============================ is_expr (recBuild RF1)
< apply IH_RF to _ _ Trans1. Subgoal 1.18: Variables: Names RF1 RF IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (recBuild RF) (recBuild RF1) @ Trans1 : transRF Names RF RF1 * H1 : is_recFieldExprs RF H2 : is_recFieldExprs RF1 ============================ is_expr (recBuild RF1)
< search. Subgoal 1.19: Variables: Names F E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (recFieldAccess E1 F) IsNames : is_list (is_list is_string) Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @ Trans1 : transE Names E1 E2 * ============================ is_expr (recFieldAccess E2 F)
< case IsE. Subgoal 1.19: Variables: Names F E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @ Trans1 : transE Names E1 E2 * H1 : is_expr E1 H2 : is_string F ============================ is_expr (recFieldAccess E2 F)
< apply IH_E to _ _ Trans1. Subgoal 1.19: Variables: Names F E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @ Trans1 : transE Names E1 E2 * H1 : is_expr E1 H2 : is_string F H3 : is_expr E2 ============================ is_expr (recFieldAccess E2 F)
< search. Subgoal 1.20: Variables: Names Ty E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr (errorExpr E1 Ty) IsNames : is_list (is_list is_string) Names Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @ Trans1 : transE Names E1 E2 * ============================ is_expr (errorExpr E2 Ty)
< case IsE. Subgoal 1.20: Variables: Names Ty E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @ Trans1 : transE Names E1 E2 * H1 : is_expr E1 H2 : is_typ Ty ============================ is_expr (errorExpr E2 Ty)
< apply IH_E to _ _ Trans1. Subgoal 1.20: Variables: Names Ty E2 E1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @ Trans1 : transE Names E1 E2 * H1 : is_expr E1 H2 : is_typ Ty H3 : is_expr E2 ============================ is_expr (errorExpr E2 Ty)
< search. Subgoal 1.21: Variables: Names T N E_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> IsNames : is_list (is_list is_string) Names Trans : transE Names <unknown I expr> T @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T * ============================ is_expr T
< apply join_is to _ Trans1. Subgoal 1.21: Variables: Names T N E_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> IsNames : is_list (is_list is_string) Names Trans : transE Names <unknown I expr> T @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T * H1 : is_list is_string N ============================ is_expr T
< apply proj_expr_is to Trans2 _ _. Subgoal 1.21: Variables: Names T N E_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> IsNames : is_list (is_list is_string) Names Trans : transE Names <unknown I expr> T @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T * H1 : is_list is_string N H2 : is_expr E_P ============================ is_expr T
< apply IH_E to _ _ Trans3. Subgoal 1.21: Variables: Names T N E_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsE : is_expr <unknown I expr> IsNames : is_list (is_list is_string) Names Trans : transE Names <unknown I expr> T @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T * H1 : is_list is_string N H2 : is_expr E_P H3 : is_expr T ============================ is_expr T
< search. Subgoal 2.1: Variables: Names' IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt noop IsNames : is_list (is_list is_string) Names' Trans : transS Names' noop noop Names' @ ============================ is_stmt noop
< search. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (seq S1 S2) IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * ============================ is_stmt (seq S11 S21)
< case IsS. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ is_stmt (seq S11 S21)
< apply IH_S to _ _ Trans1. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_stmt S11 ============================ is_stmt (seq S11 S21)
< apply IH_S_C to _ _ Trans1. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 ============================ is_stmt (seq S11 S21)
< apply IH_S to _ _ Trans2. Subgoal 2.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_stmt S21 ============================ is_stmt (seq S11 S21)
< search. Subgoal 2.3: Variables: Names1 Scope X E1 Ty E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (declare Ty X E) IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE (Scope::Names1) E E1 * ============================ is_stmt (declare Ty X E1)
< case IsS. Subgoal 2.3: Variables: Names1 Scope X E1 Ty E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE (Scope::Names1) E E1 * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ is_stmt (declare Ty X E1)
< apply IH_E to _ _ Trans1. Subgoal 2.3: Variables: Names1 Scope X E1 Ty E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE (Scope::Names1) E E1 * H1 : is_typ Ty H2 : is_string X H3 : is_expr E H4 : is_expr E1 ============================ is_stmt (declare Ty X E1)
< search. Subgoal 2.4: Variables: Names' E1 X E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (assign X E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE Names' E E1 * ============================ is_stmt (assign X E1)
< case IsS. Subgoal 2.4: Variables: Names' E1 X E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE Names' E E1 * H1 : is_string X H2 : is_expr E ============================ is_stmt (assign X E1)
< apply IH_E to _ _ Trans1. Subgoal 2.4: Variables: Names' E1 X E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE Names' E E1 * H1 : is_string X H2 : is_expr E H3 : is_expr E1 ============================ is_stmt (assign X E1)
< search. Subgoal 2.5: Variables: Names' E1 Fs Rec E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (recUpdate Rec Fs E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE Names' E E1 * ============================ is_stmt (recUpdate Rec Fs E1)
< case IsS. Subgoal 2.5: Variables: Names' E1 Fs Rec E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE Names' E E1 * H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E ============================ is_stmt (recUpdate Rec Fs E1)
< apply IH_E to _ _ Trans1. Subgoal 2.5: Variables: Names' E1 Fs Rec E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE Names' E E1 * H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E H4 : is_expr E1 ============================ is_stmt (recUpdate Rec Fs E1)
< search. Subgoal 2.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (ifThenElse Cond Th El) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< case IsS. Subgoal 2.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< apply IH_E to _ _ Trans1. Subgoal 2.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El H4 : is_expr Cond1 ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< apply IH_S to _ _ Trans2. Subgoal 2.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El H4 : is_expr Cond1 H5 : is_stmt Th1 ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< apply IH_S to _ _ Trans3. Subgoal 2.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El H4 : is_expr Cond1 H5 : is_stmt Th1 H6 : is_stmt El1 ============================ is_stmt (ifThenElse Cond1 Th1 El1)
< search. Subgoal 2.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (while Cond Body) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Body Body1 Names2 * ============================ is_stmt (while Cond1 Body1)
< case IsS. Subgoal 2.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Body Body1 Names2 * H1 : is_expr Cond H2 : is_stmt Body ============================ is_stmt (while Cond1 Body1)
< apply IH_E to _ _ Trans1. Subgoal 2.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Body Body1 Names2 * H1 : is_expr Cond H2 : is_stmt Body H3 : is_expr Cond1 ============================ is_stmt (while Cond1 Body1)
< apply IH_S to _ _ Trans2. Subgoal 2.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Body Body1 Names2 * H1 : is_expr Cond H2 : is_stmt Body H3 : is_expr Cond1 H4 : is_stmt Body1 ============================ is_stmt (while Cond1 Body1)
< search. Subgoal 2.8: Variables: Names' Names2 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (scopeStmt S1) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * ============================ is_stmt (scopeStmt S2)
< case IsS. Subgoal 2.8: Variables: Names' Names2 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * H1 : is_stmt S1 ============================ is_stmt (scopeStmt S2)
< apply IH_S to _ _ Trans1. Subgoal 2.8: Variables: Names' Names2 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * H1 : is_stmt S1 H2 : is_stmt S2 ============================ is_stmt (scopeStmt S2)
< search. Subgoal 2.9: Variables: Names' E1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (printVal E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE Names' E E1 * ============================ is_stmt (printVal E1)
< case IsS. Subgoal 2.9: Variables: Names' E1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE Names' E E1 * H1 : is_expr E ============================ is_stmt (printVal E1)
< apply IH_E to _ _ Trans1. Subgoal 2.9: Variables: Names' E1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE Names' E E1 * H1 : is_expr E H2 : is_expr E1 ============================ is_stmt (printVal E1)
< search. Subgoal 2.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * ============================ is_stmt T
< apply join_is to _ Trans1. Subgoal 2.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N ============================ is_stmt T
< apply proj_stmt_is to Trans2 _ _. Subgoal 2.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P ============================ is_stmt T
< apply IH_S to _ _ Trans3. Subgoal 2.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P H3 : is_stmt T ============================ is_stmt T
< search. Subgoal 3.1: Variables: Names' IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt noop IsNames : is_list (is_list is_string) Names' Trans : transS Names' noop noop Names' @ ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (seq S1 S2) IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * ============================ is_list (is_list is_string) Names'
< case IsS. Subgoal 3.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ is_list (is_list is_string) Names'
< apply IH_S_C to _ _ Trans1. Subgoal 3.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) Names3 ============================ is_list (is_list is_string) Names'
< apply IH_S_C to _ _ Trans2. Subgoal 3.2: Variables: Names Names' Names3 S21 S11 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS Names S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) Names3 H4 : is_list (is_list is_string) Names' ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.3: Variables: Names1 Scope X E1 Ty E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (declare Ty X E) IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE (Scope::Names1) E E1 * ============================ is_list (is_list is_string) ((X::Scope)::Names1)
< case IsS. Subgoal 3.3: Variables: Names1 Scope X E1 Ty E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) (Scope::Names1) Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE (Scope::Names1) E E1 * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ is_list (is_list is_string) ((X::Scope)::Names1)
< case IsNames. Subgoal 3.3: Variables: Names1 Scope X E1 Ty E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T Trans : transS (Scope::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names1) @ Trans1 : transE (Scope::Names1) E E1 * H1 : is_typ Ty H2 : is_string X H3 : is_expr E H4 : is_list is_string Scope H5 : is_list (is_list is_string) Names1 ============================ is_list (is_list is_string) ((X::Scope)::Names1)
< search. Subgoal 3.4: Variables: Names' E1 X E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (assign X E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @ Trans1 : transE Names' E E1 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.5: Variables: Names' E1 Fs Rec E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (recUpdate Rec Fs E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @ Trans1 : transE Names' E E1 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.6: Variables: Names' NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (ifThenElse Cond Th El) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Th Th1 NamesTh * Trans3 : transS ([]::Names') El El1 NamesEl * ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.7: Variables: Names' Names2 Body1 Cond1 Body Cond IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (while Cond Body) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @ Trans1 : transE Names' Cond Cond1 * Trans2 : transS ([]::Names') Body Body1 Names2 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.8: Variables: Names' Names2 S2 S1 IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (scopeStmt S1) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @ Trans1 : transS ([]::Names') S1 S2 Names2 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.9: Variables: Names' E1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt (printVal E) IsNames : is_list (is_list is_string) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @ Trans1 : transE Names' E E1 * ============================ is_list (is_list is_string) Names'
< search. Subgoal 3.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * ============================ is_list (is_list is_string) Names'
< apply join_is to _ Trans1. Subgoal 3.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N ============================ is_list (is_list is_string) Names'
< apply proj_stmt_is to Trans2 _ _. Subgoal 3.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P ============================ is_list (is_list is_string) Names'
< apply IH_S_C to _ _ Trans3. Subgoal 3.10: Variables: Names T Names' N S_P IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) Names Trans : transS Names <unknown I stmt> T Names' @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' * H1 : is_list is_string N H2 : is_stmt S_P H3 : is_list (is_list is_string) Names' ============================ is_list (is_list is_string) Names'
< search. Subgoal 4: Variables: Names A T IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsA : is_args A IsNames : is_list (is_list is_string) Names Trans : transA Names A T @ ============================ is_args T
< Trans: case Trans (keep). Subgoal 4.1: Variables: Names IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsA : is_args nilArgs IsNames : is_list (is_list is_string) Names Trans : transA Names nilArgs nilArgs @ ============================ is_args nilArgs
< search. Subgoal 4.2: Variables: Names A2 E1 A1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsA : is_args (consArgs E A1) IsNames : is_list (is_list is_string) Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE Names E E1 * Trans2 : transA Names A1 A2 * ============================ is_args (consArgs E1 A2)
< case IsA. Subgoal 4.2: Variables: Names A2 E1 A1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE Names E E1 * Trans2 : transA Names A1 A2 * H1 : is_expr E H2 : is_args A1 ============================ is_args (consArgs E1 A2)
< apply IH_E to _ _ Trans1. Subgoal 4.2: Variables: Names A2 E1 A1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE Names E E1 * Trans2 : transA Names A1 A2 * H1 : is_expr E H2 : is_args A1 H3 : is_expr E1 ============================ is_args (consArgs E1 A2)
< apply IH_A to _ _ Trans2. Subgoal 4.2: Variables: Names A2 E1 A1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @ Trans1 : transE Names E E1 * Trans2 : transA Names A1 A2 * H1 : is_expr E H2 : is_args A1 H3 : is_expr E1 H4 : is_args A2 ============================ is_args (consArgs E1 A2)
< search. Subgoal 5: Variables: Names RF T IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsRF : is_recFieldExprs RF IsNames : is_list (is_list is_string) Names Trans : transRF Names RF T @ ============================ is_recFieldExprs T
< Trans: case Trans (keep). Subgoal 5.1: Variables: Names IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsRF : is_recFieldExprs nilRecFieldExprs IsNames : is_list (is_list is_string) Names Trans : transRF Names nilRecFieldExprs nilRecFieldExprs @ ============================ is_recFieldExprs nilRecFieldExprs
< search. Subgoal 5.2: Variables: Names RF2 E1 F RF1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsRF : is_recFieldExprs (consRecFieldExprs F E RF1) IsNames : is_list (is_list is_string) Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE Names E E1 * Trans2 : transRF Names RF1 RF2 * ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< case IsRF. Subgoal 5.2: Variables: Names RF2 E1 F RF1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE Names E E1 * Trans2 : transRF Names RF1 RF2 * H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< apply IH_E to _ _ Trans1. Subgoal 5.2: Variables: Names RF2 E1 F RF1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE Names E E1 * Trans2 : transRF Names RF1 RF2 * H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 H4 : is_expr E1 ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< apply IH_RF to _ _ Trans2. Subgoal 5.2: Variables: Names RF2 E1 F RF1 E IH_E : forall Names E T, is_expr E -> is_list (is_list is_string) Names -> transE Names E T * -> is_expr T IH_S : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_stmt T IH_S_C : forall Names S T Names', is_stmt S -> is_list (is_list is_string) Names -> transS Names S T Names' * -> is_list (is_list is_string) Names' IH_A : forall Names A T, is_args A -> is_list (is_list is_string) Names -> transA Names A T * -> is_args T IH_RF : forall Names RF T, is_recFieldExprs RF -> is_list (is_list is_string) Names -> transRF Names RF T * -> is_recFieldExprs T IsNames : is_list (is_list is_string) Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @ Trans1 : transE Names E E1 * Trans2 : transRF Names RF1 RF2 * H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 H4 : is_expr E1 H5 : is_recFieldExprs RF2 ============================ is_recFieldExprs (consRecFieldExprs F E1 RF2)
< search. Proof completed.
< Theorem domain_is_tys : forall L D, is_list (is_pair is_string is_typ) L -> domain L D -> is_list is_string D. ============================ forall L D, is_list (is_pair is_string is_typ) L -> domain L D -> is_list is_string D
< induction on 2. IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D ============================ forall L D, is_list (is_pair is_string is_typ) L -> domain L D @ -> is_list is_string D
< intros Is D. Variables: L D IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D Is : is_list (is_pair is_string is_typ) L D : domain L D @ ============================ is_list is_string D
< D: case D. Subgoal 1: IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D Is : is_list (is_pair is_string is_typ) [] ============================ is_list is_string []
< search. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D Is : is_list (is_pair is_string is_typ) ((A, B)::Rest) D : domain Rest DRest * ============================ is_list is_string (A::DRest)
< Is: case Is. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D D : domain Rest DRest * Is : is_pair is_string is_typ (A, B) Is1 : is_list (is_pair is_string is_typ) Rest ============================ is_list is_string (A::DRest)
< case Is. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D D : domain Rest DRest * Is1 : is_list (is_pair is_string is_typ) Rest H1 : is_string A H2 : is_typ B ============================ is_list is_string (A::DRest)
< apply IH to _ D. Subgoal 2: Variables: DRest A Rest B IH : forall L D, is_list (is_pair is_string is_typ) L -> domain L D * -> is_list is_string D D : domain Rest DRest * Is1 : is_list (is_pair is_string is_typ) Rest H1 : is_string A H2 : is_typ B H3 : is_list is_string DRest ============================ is_list is_string (A::DRest)
< search. Proof completed.
< Extensible_Theorem transF_is : forall F T, IsF : is_fun F -> Trans : transF F T -> is_fun T on Trans. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun (fun F1 RetTy RetVar InitVal Params Body) Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< case IsF. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< apply paramTys_is to _ Trans1. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body H7 : is_list (is_pair is_string is_typ) PTys ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< apply domain_is_tys to _ Trans2. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body H7 : is_list (is_pair is_string is_typ) PTys H8 : is_list is_string Names ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< apply transS_is to _ _ Trans3. Subgoal 1: Variables: PTys Names Names1 Body1 Params InitVal RetVar RetTy F1 Body IH : forall F T, is_fun F -> transF F T * -> is_fun T Trans : transF (fun F1 RetTy RetVar InitVal Params Body) (fun F1 RetTy RetVar InitVal Params Body1) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body1 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body H7 : is_list (is_pair is_string is_typ) PTys H8 : is_list is_string Names H9 : is_stmt Body1 ============================ is_fun (fun F1 RetTy RetVar InitVal Params Body1)
< search. Subgoal 2: Variables: T F_P IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> T @ Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P T * ============================ is_fun T
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: T F_P IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> T @ Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P T * H1 : is_fun F_P ============================ is_fun T
< apply IH to _ Trans2. Subgoal 2: Variables: T F_P IH : forall F T, is_fun F -> transF F T * -> is_fun T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> T @ Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P T * H1 : is_fun F_P H2 : is_fun T ============================ is_fun T
< search. Proof completed.
< Theorem transFuns_is : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts -> is_list is_fun Ts. ============================ forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts -> is_list is_fun Ts
< induction on 2. IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts ============================ forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts @ -> is_list is_fun Ts
< intros IsFs TF. Variables: Fs Ts IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts IsFs : is_list is_fun Fs TF : transFuns Fs Ts @ ============================ is_list is_fun Ts
< TF: case TF. Subgoal 1: IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts IsFs : is_list is_fun [] ============================ is_list is_fun []
< search. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts IsFs : is_list is_fun (F::Rest) TF : transF F F1 TF1 : transFuns Rest Rest1 * ============================ is_list is_fun (F1::Rest1)
< case IsFs. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts TF : transF F F1 TF1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest ============================ is_list is_fun (F1::Rest1)
< apply IH to _ TF1. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts TF : transF F F1 TF1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest H3 : is_list is_fun Rest1 ============================ is_list is_fun (F1::Rest1)
< apply transF_is to _ TF. Subgoal 2: Variables: Rest1 F1 Rest F IH : forall Fs Ts, is_list is_fun Fs -> transFuns Fs Ts * -> is_list is_fun Ts TF : transF F F1 TF1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest H3 : is_list is_fun Rest1 H4 : is_fun F1 ============================ is_list is_fun (F1::Rest1)
< search. Proof completed.
< Extensible_Theorem transP_is : forall P T, IsP : is_program P -> Trans : transP P T -> is_program T on Trans. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program (program Funs Main) Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 ============================ is_program (program Funs1 Main1)
< case IsP. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main ============================ is_program (program Funs1 Main1)
< apply transFuns_is to _ Trans1. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main H3 : is_list is_fun Funs1 ============================ is_program (program Funs1 Main1)
< apply transF_is to _ Trans2. Subgoal 1: Variables: Main1 Funs1 Main Funs IH : forall P T, is_program P -> transP P T * -> is_program T Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 ============================ is_program (program Funs1 Main1)
< search. Subgoal 2: Variables: T P_P IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program <unknown I program> Trans : transP <unknown I program> T @ Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P T * ============================ is_program T
< apply proj_program_is to Trans1 _. Subgoal 2: Variables: T P_P IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program <unknown I program> Trans : transP <unknown I program> T @ Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P T * H1 : is_program P_P ============================ is_program T
< apply IH to _ Trans2. Subgoal 2: Variables: T P_P IH : forall P T, is_program P -> transP P T * -> is_program T IsP : is_program <unknown I program> Trans : transP <unknown I program> T @ Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P T * H1 : is_program P_P H2 : is_program T ============================ is_program T
< search. Proof completed.
< Extensible_Theorem transS_old_scopes : forall Names Scope S S' Names', IsS : is_stmt S -> IsNames : is_list (is_list is_string) (Scope::Names) -> Trans : transS (Scope::Names) S S' Names' -> exists Scope', Names' = Scope'::Names on Trans. Subgoal 1: Variables: Names Scope IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt noop IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) noop noop (Scope::Names) @ ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 2: Variables: Names Scope Names' Names3 S21 S11 S2 S1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (seq S1 S2) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * ============================ exists Scope', Names' = Scope'::Names
< case IsS. Subgoal 2: Variables: Names Scope Names' Names3 S21 S11 S2 S1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 Names3 * Trans2 : transS Names3 S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists Scope', Names' = Scope'::Names
< apply IH to _ _ Trans1. Subgoal 2: Variables: Names Scope Names' S21 S11 S2 S1 Scope' IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) * Trans2 : transS (Scope'::Names) S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists Scope', Names' = Scope'::Names
< apply transS_isNames to _ _ Trans1. Subgoal 2: Variables: Names Scope Names' S21 S11 S2 S1 Scope' IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) Names' @ Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) * Trans2 : transS (Scope'::Names) S2 S21 Names' * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) (Scope'::Names) ============================ exists Scope', Names' = Scope'::Names
< apply IH to _ _ Trans2. Subgoal 2: Variables: Names Scope S21 S11 S2 S1 Scope' Scope'1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (seq S1 S2) (seq S11 S21) (Scope'1::Names) @ Trans1 : transS (Scope::Names) S1 S11 (Scope'::Names) * Trans2 : transS (Scope'::Names) S2 S21 (Scope'1::Names) * H1 : is_stmt S1 H2 : is_stmt S2 H3 : is_list (is_list is_string) (Scope'::Names) ============================ exists Scope', Scope'1::Names = Scope'::Names
< search. Subgoal 3: Variables: Names Scope X E1 Ty E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (declare Ty X E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (declare Ty X E) (declare Ty X E1) ((X::Scope)::Names) @ Trans1 : transE (Scope::Names) E E1 * ============================ exists Scope', (X::Scope)::Names = Scope'::Names
< search. Subgoal 4: Variables: Names Scope E1 X E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (assign X E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (assign X E) (assign X E1) (Scope::Names) @ Trans1 : transE (Scope::Names) E E1 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 5: Variables: Names Scope E1 Fs Rec E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (recUpdate Rec Fs E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (recUpdate Rec Fs E) (recUpdate Rec Fs E1) (Scope::Names) @ Trans1 : transE (Scope::Names) E E1 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 6: Variables: Names Scope NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (ifThenElse Cond Th El) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) (Scope::Names) @ Trans1 : transE (Scope::Names) Cond Cond1 * Trans2 : transS ([]::(Scope::Names)) Th Th1 NamesTh * Trans3 : transS ([]::(Scope::Names)) El El1 NamesEl * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 7: Variables: Names Scope Names2 Body1 Cond1 Body Cond IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (while Cond Body) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (while Cond Body) (while Cond1 Body1) (Scope::Names) @ Trans1 : transE (Scope::Names) Cond Cond1 * Trans2 : transS ([]::(Scope::Names)) Body Body1 Names2 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 8: Variables: Names Scope Names2 S2 S1 IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (scopeStmt S1) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (scopeStmt S1) (scopeStmt S2) (Scope::Names) @ Trans1 : transS ([]::(Scope::Names)) S1 S2 Names2 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 9: Variables: Names Scope E1 E IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt (printVal E) IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) (printVal E) (printVal E1) (Scope::Names) @ Trans1 : transE (Scope::Names) E E1 * ============================ exists Scope', Scope::Names = Scope'::Names
< search. Subgoal 10: Variables: Names Scope S' Names' N S_P IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' Names' @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' Names' * ============================ exists Scope', Names' = Scope'::Names
< apply join_is to _ Trans1. Subgoal 10: Variables: Names Scope S' Names' N S_P IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' Names' @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' Names' * H1 : is_list is_string N ============================ exists Scope', Names' = Scope'::Names
< apply proj_stmt_is to Trans2 _ _. Subgoal 10: Variables: Names Scope S' Names' N S_P IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' Names' @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' Names' * H1 : is_list is_string N H2 : is_stmt S_P ============================ exists Scope', Names' = Scope'::Names
< apply IH to _ _ Trans3. Subgoal 10: Variables: Names Scope S' N S_P Scope' IH : forall Names Scope S S' Names', is_stmt S -> is_list (is_list is_string) (Scope::Names) -> transS (Scope::Names) S S' Names' * -> exists Scope', Names' = Scope'::Names IsS : is_stmt <unknown I stmt> IsNames : is_list (is_list is_string) (Scope::Names) Trans : transS (Scope::Names) <unknown I stmt> S' (Scope'::Names) @ Trans1 : join (Scope::Names) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (Scope::Names) S_P S' (Scope'::Names) * H1 : is_list is_string N H2 : is_stmt S_P ============================ exists Scope'1, Scope'::Names = Scope'1::Names
< search. Proof completed.
< Theorem mem_names [K, V] : forall (EE : list (list (pair K V))) N X, names EE N -> mem X N -> exists V, mems (X, V) EE. ============================ forall EE N X, names EE N -> mem X N -> exists V, mems (X, V) EE
< induction on 1. IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE ============================ forall EE N X, names EE N @ -> mem X N -> exists V, mems (X, V) EE
< intros Names M. Variables: EE N X IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE Names : names EE N @ M : mem X N ============================ exists V, mems (X, V) EE
< Names: case Names. Subgoal 1: Variables: X IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X [] ============================ exists V, mems (X, V) []
< case M. Subgoal 2: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N ============================ exists V, mems (X, V) (Scope::Rest)
< Or: apply mem_append to M Names2. Subgoal 2: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N Or : mem X NScope \/ mem X NRest ============================ exists V, mems (X, V) (Scope::Rest)
< M': case Or. Subgoal 2.1: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NScope ============================ exists V, mems (X, V) (Scope::Rest)
< apply mem_domain to Names M'. Subgoal 2.1: Variables: N X NScope NRest Rest Scope B IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NScope H1 : mem (X, B) Scope ============================ exists V, mems (X, V) (Scope::Rest)
< search. Subgoal 2.2: Variables: N X NScope NRest Rest Scope IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NRest ============================ exists V, mems (X, V) (Scope::Rest)
< apply IH to Names1 M'. Subgoal 2.2: Variables: N X NScope NRest Rest Scope V IH : forall EE N X, names EE N * -> mem X N -> exists V, mems (X, V) EE M : mem X N Names : domain Scope NScope Names1 : names Rest NRest * Names2 : NScope ++ NRest = N M' : mem X NRest H1 : mems (X, V) Rest ============================ exists V, mems (X, V) (Scope::Rest)
< search. Proof completed.
< Theorem mems_names [K, V] : forall EE N (X : K) (V : V), names EE N -> mems (X, V) EE -> mem X N. ============================ forall EE N X V, names EE N -> mems (X, V) EE -> mem X N
< induction on 2. IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N ============================ forall EE N X V, names EE N -> mems (X, V) EE @ -> mem X N
< intros N M. Variables: EE N X V IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N N : names EE N M : mems (X, V) EE @ ============================ mem X N
< M: case M. Subgoal 1: Variables: N X V Rest S IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N N : names (S::Rest) N M : mem (X, V) S ============================ mem X N
< N: case N. Subgoal 1: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mem (X, V) S N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N ============================ mem X N
< MNS: apply domain_mem to M N. Subgoal 1: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mem (X, V) S N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNS : mem X NScope ============================ mem X N
< apply mem_append_left to MNS N2. Subgoal 1: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mem (X, V) S N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNS : mem X NScope H1 : mem X N ============================ mem X N
< search. Subgoal 2: Variables: N X V Rest S IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N N : names (S::Rest) N M : mems (X, V) Rest * ============================ mem X N
< N: case N. Subgoal 2: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mems (X, V) Rest * N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N ============================ mem X N
< MNR: apply IH to N1 M. Subgoal 2: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mems (X, V) Rest * N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNR : mem X NRest ============================ mem X N
< apply mem_append_right to MNR N2. Subgoal 2: Variables: N X V Rest S NScope NRest IH : forall EE N X V, names EE N -> mems (X, V) EE * -> mem X N M : mems (X, V) Rest * N : domain S NScope N1 : names Rest NRest N2 : NScope ++ NRest = N MNR : mem X NRest H1 : mem X N ============================ mem X N
< search. Proof completed.
< Theorem mem_join [A] : forall (L : list (list A)) J X, join L J -> mem X J -> mems X L. ============================ forall L J X, join L J -> mem X J -> mems X L
< induction on 1. IH : forall L J X, join L J * -> mem X J -> mems X L ============================ forall L J X, join L J @ -> mem X J -> mems X L
< intros J M. Variables: L J X IH : forall L J X, join L J * -> mem X J -> mems X L J : join L J @ M : mem X J ============================ mems X L
< J: case J. Subgoal 1: Variables: X IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X [] ============================ mems X []
< case M. Subgoal 2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J ============================ mems X (S::SRest)
< Or: apply mem_append to M J1. Subgoal 2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J Or : mem X S \/ mem X Rest ============================ mems X (S::SRest)
< M': case Or. Subgoal 2.1: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J M' : mem X S ============================ mems X (S::SRest)
< search. Subgoal 2.2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J M' : mem X Rest ============================ mems X (S::SRest)
< apply IH to J M'. Subgoal 2.2: Variables: J X Rest SRest S IH : forall L J X, join L J * -> mem X J -> mems X L M : mem X J J : join SRest Rest * J1 : S ++ Rest = J M' : mem X Rest H1 : mems X SRest ============================ mems X (S::SRest)
< search. Proof completed.
< Theorem mems_join [A] : forall L J (X : A), join L J -> mems X L -> mem X J. ============================ forall L J X, join L J -> mems X L -> mem X J
< induction on 2. IH : forall L J X, join L J -> mems X L * -> mem X J ============================ forall L J X, join L J -> mems X L @ -> mem X J
< intros J M. Variables: L J X IH : forall L J X, join L J -> mems X L * -> mem X J J : join L J M : mems X L @ ============================ mem X J
< M: case M. Subgoal 1: Variables: J X Rest S IH : forall L J X, join L J -> mems X L * -> mem X J J : join (S::Rest) J M : mem X S ============================ mem X J
< J: case J. Subgoal 1: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mem X S J : join Rest Rest1 J1 : S ++ Rest1 = J ============================ mem X J
< apply mem_append_left to M J1. Subgoal 1: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mem X S J : join Rest Rest1 J1 : S ++ Rest1 = J H1 : mem X J ============================ mem X J
< search. Subgoal 2: Variables: J X Rest S IH : forall L J X, join L J -> mems X L * -> mem X J J : join (S::Rest) J M : mems X Rest * ============================ mem X J
< J: case J. Subgoal 2: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mems X Rest * J : join Rest Rest1 J1 : S ++ Rest1 = J ============================ mem X J
< MR: apply IH to J M. Subgoal 2: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mems X Rest * J : join Rest Rest1 J1 : S ++ Rest1 = J MR : mem X Rest1 ============================ mem X J
< apply mem_append_right to MR J1. Subgoal 2: Variables: J X Rest S Rest1 IH : forall L J X, join L J -> mems X L * -> mem X J M : mems X Rest * J : join Rest Rest1 J1 : S ++ Rest1 = J MR : mem X Rest1 H1 : mem X J ============================ mem X J
< search. Proof completed.
< Theorem ctx_names_mems_fwd [K, V] : forall EE N (X : K) (V : V), ctx_names EE N -> mems (X, V) EE -> mems X N. ============================ forall EE N X V, ctx_names EE N -> mems (X, V) EE -> mems X N
< induction on 2. IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N ============================ forall EE N X V, ctx_names EE N -> mems (X, V) EE @ -> mems X N
< intros Ctxs M. Variables: EE N X V IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N Ctxs : ctx_names EE N M : mems (X, V) EE @ ============================ mems X N
< M: case M. Subgoal 1: Variables: N X V Rest S IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N Ctxs : ctx_names (S::Rest) N M : mem (X, V) S ============================ mems X N
< C: case Ctxs. Subgoal 1: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mem (X, V) S C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest ============================ mems X (B::BRest)
< apply C to M. Subgoal 1: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mem (X, V) S C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest H1 : mem X B ============================ mems X (B::BRest)
< search. Subgoal 2: Variables: N X V Rest S IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N Ctxs : ctx_names (S::Rest) N M : mems (X, V) Rest * ============================ mems X N
< C: case Ctxs. Subgoal 2: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mems (X, V) Rest * C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest ============================ mems X (B::BRest)
< apply IH to C2 M. Subgoal 2: Variables: X V Rest S BRest B IH : forall EE N X V, ctx_names EE N -> mems (X, V) EE * -> mems X N M : mems (X, V) Rest * C : forall K I, mem (K, I) S -> mem K B C1 : forall K, mem K B -> exists I, mem (K, I) S C2 : ctx_names Rest BRest H1 : mems X BRest ============================ mems X (B::BRest)
< search. Proof completed.
< Theorem ctx_names_mem_back [K, V] : forall EE N (X : K), ctx_names EE N -> mems X N -> exists (V : V), mems (X, V) EE. ============================ forall EE N X, ctx_names EE N -> mems X N -> exists V, mems (X, V) EE
< induction on 2. IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE ============================ forall EE N X, ctx_names EE N -> mems X N @ -> exists V, mems (X, V) EE
< intros Ctxs M. Variables: EE N X IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE Ctxs : ctx_names EE N M : mems X N @ ============================ exists V, mems (X, V) EE
< M: case M. Subgoal 1: Variables: EE X Rest S IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE Ctxs : ctx_names EE (S::Rest) M : mem X S ============================ exists V, mems (X, V) EE
< C: case Ctxs. Subgoal 1: Variables: X Rest S ARest A IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mem X S C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest ============================ exists V, mems (X, V) (A::ARest)
< apply C1 to M. Subgoal 1: Variables: X Rest S ARest A I IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mem X S C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest H1 : mem (X, I) A ============================ exists V, mems (X, V) (A::ARest)
< search. Subgoal 2: Variables: EE X Rest S IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE Ctxs : ctx_names EE (S::Rest) M : mems X Rest * ============================ exists V, mems (X, V) EE
< C: case Ctxs. Subgoal 2: Variables: X Rest S ARest A IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mems X Rest * C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest ============================ exists V, mems (X, V) (A::ARest)
< apply IH to C2 M. Subgoal 2: Variables: X Rest S ARest A V IH : forall EE N X, ctx_names EE N -> mems X N * -> exists V, mems (X, V) EE M : mems X Rest * C : forall K I, mem (K, I) A -> mem K S C1 : forall K, mem K S -> exists I, mem (K, I) A C2 : ctx_names ARest Rest H1 : mems (X, V) ARest ============================ exists V, mems (X, V) (A::ARest)
< search. Proof completed.
< Theorem proj_expr_unique_ctx_names : forall E EA EB Names NA EE NB, is_expr E -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE -> ctx_names EE Names -> join Names NA -> names EE NB -> NA |{expr}- E ~~> EA -> NB |{expr}- E ~~> EB -> EA = EB. ============================ forall E EA EB Names NA EE NB, is_expr E -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE -> ctx_names EE Names -> join Names NA -> names EE NB -> NA |{expr}- E ~~> EA -> NB |{expr}- E ~~> EB -> EA = EB
< intros IsE IsNames IsEE Ctxs J N PrA PrB. Variables: E EA EB Names NA EE NB IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB ============================ EA = EB
< apply join_is to _ J. Variables: E EA EB Names NA EE NB IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA ============================ EA = EB
< apply names_is to _ N. Variables: E EA EB Names NA EE NB IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB ============================ EA = EB
< apply proj_expr_unique to PrA PrB _ _ _ _ _. Subgoal 1: Variables: E EA EB Names NA EE NB IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB ============================ forall X, mem X NB -> mem X NA
< intros MB. Subgoal 1: Variables: E EA EB Names NA EE NB X IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB ============================ mem X NA
< MEE: apply mem_names to N MB. Subgoal 1: Variables: E EA EB Names NA EE NB X V IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE ============================ mem X NA
< MN: apply ctx_names_mems_fwd to Ctxs MEE. Subgoal 1: Variables: E EA EB Names NA EE NB X V IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE MN : mems X Names ============================ mem X NA
< apply mems_join to J MN. Subgoal 1: Variables: E EA EB Names NA EE NB X V IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE MN : mems X Names H3 : mem X NA ============================ mem X NA
< search. Subgoal 2: Variables: E EA EB Names NA EE NB IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB ============================ forall X, mem X NA -> mem X NB
< intros MA. Subgoal 2: Variables: E EA EB Names NA EE NB X IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA ============================ mem X NB
< MN: apply mem_join to J MA. Subgoal 2: Variables: E EA EB Names NA EE NB X IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names ============================ mem X NB
< MEE: apply ctx_names_mem_back to Ctxs MN. Subgoal 2: Variables: E EA EB Names NA EE NB X V IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names MEE : mems (X, V) EE ============================ mem X NB
< apply mems_names to N MEE. Subgoal 2: Variables: E EA EB Names NA EE NB X V IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EA PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names MEE : mems (X, V) EE H3 : mem X NB ============================ mem X NB
< search. Variables: E EB Names NA EE NB IsE : is_expr E IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{expr}- E ~~> EB PrB : NB |{expr}- E ~~> EB H1 : is_list is_string NA H2 : is_list is_string NB ============================ EB = EB
< search. Proof completed.
< Theorem proj_stmt_unique_ctx_names : forall S SA SB Names NA EE NB, is_stmt S -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE -> ctx_names EE Names -> join Names NA -> names EE NB -> NA |{stmt}- S ~~> SA -> NB |{stmt}- S ~~> SB -> SA = SB. ============================ forall S SA SB Names NA EE NB, is_stmt S -> is_list (is_list is_string) Names -> is_list (is_list (is_pair is_string is_value)) EE -> ctx_names EE Names -> join Names NA -> names EE NB -> NA |{stmt}- S ~~> SA -> NB |{stmt}- S ~~> SB -> SA = SB
< intros IsS IsNames IsEE Ctxs J N PrA PrB. Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB ============================ SA = SB
< apply join_is to _ J. Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA ============================ SA = SB
< apply names_is to _ N. Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ SA = SB
< apply proj_stmt_unique to PrA PrB _ _ _ _ _. Subgoal 1: Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ forall X, mem X NB -> mem X NA
< intros MB. Subgoal 1: Variables: S SA SB Names NA EE NB X IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB ============================ mem X NA
< MEE: apply mem_names to N MB. Subgoal 1: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE ============================ mem X NA
< MN: apply ctx_names_mems_fwd to Ctxs MEE. Subgoal 1: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE MN : mems X Names ============================ mem X NA
< apply mems_join to J MN. Subgoal 1: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MB : mem X NB MEE : mems (X, V) EE MN : mems X Names H3 : mem X NA ============================ mem X NA
< search. Subgoal 2: Variables: S SA SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ forall X, mem X NA -> mem X NB
< intros MA. Subgoal 2: Variables: S SA SB Names NA EE NB X IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA ============================ mem X NB
< MN: apply mem_join to J MA. Subgoal 2: Variables: S SA SB Names NA EE NB X IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names ============================ mem X NB
< MEE: apply ctx_names_mem_back to Ctxs MN. Subgoal 2: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names MEE : mems (X, V) EE ============================ mem X NB
< apply mems_names to N MEE. Subgoal 2: Variables: S SA SB Names NA EE NB X V IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SA PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB MA : mem X NA MN : mems X Names MEE : mems (X, V) EE H3 : mem X NB ============================ mem X NB
< search. Variables: S SB Names NA EE NB IsS : is_stmt S IsNames : is_list (is_list is_string) Names IsEE : is_list (is_list (is_pair is_string is_value)) EE Ctxs : ctx_names EE Names J : join Names NA N : names EE NB PrA : NA |{stmt}- S ~~> SB PrB : NB |{stmt}- S ~~> SB H1 : is_list is_string NA H2 : is_list is_string NB ============================ SB = SB
< search. Proof completed.
< Theorem ctx_names_scopes_same : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N -> scopes_same EE_A EE_B -> ctx_names EE_A N. ============================ forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N -> scopes_same EE_A EE_B -> ctx_names EE_A N
< induction on 3. IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N ============================ forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N @ -> scopes_same EE_A EE_B -> ctx_names EE_A N
< intros IsA IsB CN SS. Variables: N EE_A EE_B IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) EE_A IsB : is_list (is_list (is_pair is_string is_value)) EE_B CN : ctx_names EE_B N @ SS : scopes_same EE_A EE_B ============================ ctx_names EE_A N
< CN: case CN. Subgoal 1: Variables: EE_A IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) EE_A IsB : is_list (is_list (is_pair is_string is_value)) [] SS : scopes_same EE_A [] ============================ ctx_names EE_A []
< case SS. Subgoal 1: IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) [] IsB : is_list (is_list (is_pair is_string is_value)) [] ============================ ctx_names [] []
< search. Subgoal 2: Variables: EE_A BRest B ARest A IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) EE_A IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) SS : scopes_same EE_A (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * ============================ ctx_names EE_A (B::BRest)
< SS: case SS. Subgoal 2: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ ctx_names (A1::ARest1) (B::BRest)
< unfold . Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ forall K I, mem (K, I) A1 -> mem K B
< intros MA1. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 ============================ mem K B
< IsA: case IsA. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 ============================ mem K B
< IsP: apply mem_is to _ MA1. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 IsP : is_pair is_string is_value (K, I) ============================ mem K B
< case IsP. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I ============================ mem K B
< L: apply mem_lookup to IsA MA1. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I L : lookup A1 K V' ============================ mem K B
< LA: apply SS to L. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I L : lookup A1 K V' LA : lookup A K V' ============================ mem K B
< apply lookup_mem to LA. Subgoal 2.1: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MA1 : mem (K, I) A1 IsA : is_list (is_pair is_string is_value) A1 IsA1 : is_list (is_list (is_pair is_string is_value)) ARest1 H1 : is_string K H2 : is_value I L : lookup A1 K V' LA : lookup A K V' H3 : mem (K, V') A ============================ mem K B
< backchain CN. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ forall K, mem K B -> exists I, mem (K, I) A1
< intros MB. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B ============================ exists I, mem (K, I) A1
< MA: apply CN1 to MB. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A ============================ exists I, mem (K, I) A1
< IsB: case IsB. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest ============================ exists I, mem (K, I) A1
< IsP: apply mem_is to _ MA. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest IsP : is_pair is_string is_value (K, I) ============================ exists I, mem (K, I) A1
< case IsP. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I ============================ exists I, mem (K, I) A1
< L: apply mem_lookup to _ MA. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I L : lookup A K V' ============================ exists I, mem (K, I) A1
< L': apply SS1 to L. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I L : lookup A K V' L' : lookup A1 K V' ============================ exists I, mem (K, I) A1
< apply lookup_mem to L'. Subgoal 2.2: Variables: BRest B ARest A ARest1 A1 K I V' IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest MB : mem K B MA : mem (K, I) A IsB : is_list (is_pair is_string is_value) A IsB1 : is_list (is_list (is_pair is_string is_value)) ARest H1 : is_string K H2 : is_value I L : lookup A K V' L' : lookup A1 K V' H3 : mem (K, V') A1 ============================ exists I, mem (K, I) A1
< search. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsA : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest ============================ ctx_names ARest1 BRest
< case IsA. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N IsB : is_list (is_list (is_pair is_string is_value)) (A::ARest) CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest H1 : is_list (is_pair is_string is_value) A1 H2 : is_list (is_list (is_pair is_string is_value)) ARest1 ============================ ctx_names ARest1 BRest
< case IsB. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest H1 : is_list (is_pair is_string is_value) A1 H2 : is_list (is_list (is_pair is_string is_value)) ARest1 H3 : is_list (is_pair is_string is_value) A H4 : is_list (is_list (is_pair is_string is_value)) ARest ============================ ctx_names ARest1 BRest
< apply IH to _ _ CN2 SS2. Subgoal 2.3: Variables: BRest B ARest A ARest1 A1 IH : forall N EE_A EE_B, is_list (is_list (is_pair is_string is_value)) EE_A -> is_list (is_list (is_pair is_string is_value)) EE_B -> ctx_names EE_B N * -> scopes_same EE_A EE_B -> ctx_names EE_A N CN : forall K I, mem (K, I) A -> mem K B CN1 : forall K, mem K B -> exists I, mem (K, I) A CN2 : ctx_names ARest BRest * SS : forall X V, lookup A1 X V -> lookup A X V SS1 : forall X V, lookup A X V -> lookup A1 X V SS2 : scopes_same ARest1 ARest H1 : is_list (is_pair is_string is_value) A1 H2 : is_list (is_list (is_pair is_string is_value)) ARest1 H3 : is_list (is_pair is_string is_value) A H4 : is_list (is_list (is_pair is_string is_value)) ARest H5 : ctx_names ARest1 BRest ============================ ctx_names ARest1 BRest
< search. Proof completed.
< Extensible_Theorem evalExpr_trans_ctx_names : forall Names E T FE EE V EE' O, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsNames : is_list (is_list is_string) Names -> Ctxs : ctx_names EE Names -> Trans : transE Names E T -> Ev : evalExpr FE EE E V EE' O -> ctx_names EE' Names on Ev as IH_E, evalStmt_trans_ctx_names : forall Names S T Names' FE Scope EE EE' O, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsNames : is_list (is_list is_string) Names -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> ctx_names EE' Names' on Ev as IH_S, evalArgs_trans_ctx_names : forall Names A T FE EE V EE' O, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsNames : is_list (is_list is_string) Names -> Ctxs : ctx_names EE Names -> Trans : transA Names A T -> Ev : evalArgs FE EE A V EE' O -> ctx_names EE' Names on Ev as IH_A, evalRecFields_trans_ctx_names : forall Names RF T FE EE V EE' O, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsNames : is_list (is_list is_string) Names -> Ctxs : ctx_names EE Names -> Trans : transRF Names RF T -> Ev : evalRecFields FE EE RF V EE' O -> ctx_names EE' Names on Ev as IH_RF. Subgoal 1: Variables: Names E T FE EE V EE' O IsE : is_expr E IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names E T Ev : evalExpr FE EE E V EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
< search. Subgoal 2: Variables: Names S T Names' FE Scope EE EE' O IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 3: Variables: Names A T FE EE V EE' O IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transA Names A T Ev : evalArgs FE EE A V EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
< search. Subgoal 4: Variables: Names RF T FE EE V EE' O IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transRF Names RF T Ev : evalRecFields FE EE RF V EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
< search. Subgoal 5.1.1: Variables: Names T FE EE' I IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transE Names (num I) T Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ ============================ ctx_names EE' Names
< search. Subgoal 5.1.2: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.2: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.2: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.2: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.2: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.2: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.3: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.3: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.3: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.3: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.3: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.3: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.4: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.4: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.4: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.4: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.4: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.4: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.5: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.5: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.5: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.5: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.5: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.5: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.6: Variables: Names T FE EE' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transE Names true T Ev : evalExpr FE EE' true trueVal EE' [] @ ============================ ctx_names EE' Names
< search. Subgoal 5.1.7: Variables: Names T FE EE' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transE Names false T Ev : evalExpr FE EE' false falseVal EE' [] @ ============================ ctx_names EE' Names
< search. Subgoal 5.1.8: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.8: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.8: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.8: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.8: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.8: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.9: Variables: Names T FE EE EE' O E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.9: Variables: Names T FE EE EE' O E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.9: Variables: Names FE EE EE' O E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.9: Variables: Names FE EE EE' O E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.10: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.10: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.10: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.10: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.10: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.10: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.11: Variables: Names T FE EE EE' O E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.11: Variables: Names T FE EE EE' O E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.11: Variables: Names FE EE EE' O E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.11: Variables: Names FE EE EE' O E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.12: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.12: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.12: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.12: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.12: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.12: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.13: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.13: Variables: Names T FE EE EE' O EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.13: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.13: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.13: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.13: Variables: Names FE EE EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.14: Variables: Names T FE EE EE' O E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.14: Variables: Names T FE EE EE' O E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.14: Variables: Names FE EE EE' O E1 E3 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.14: Variables: Names FE EE EE' O E1 E3 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 H2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.15: Variables: Names T FE EE EE' O E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.15: Variables: Names T FE EE EE' O E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.15: Variables: Names FE EE EE' O E1 E3 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.15: Variables: Names FE EE EE' O E1 E3 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 H2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.16: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.16: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.16: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.16: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.16: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.16: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.17: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.17: Variables: Names T FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.17: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.17: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.17: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.17: Variables: Names FE EE EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.18: Variables: Names T FE EE EE' O V1 EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.18: Variables: Names T FE EE EE' O V1 EE3 O2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.18: Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.18: Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.18: Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.18: Variables: Names FE EE EE' O V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.19: Variables: Names T FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.19: Variables: Names T FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.19: Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.19: Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.19: Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.19: Variables: Names FE EE EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.20: Variables: Names T FE EE' S IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transE Names (stringLit S) T Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ ============================ ctx_names EE' Names
< search. Subgoal 5.1.21: Variables: Names T FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.21: Variables: Names T FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.21: Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.21: Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< Ctxs1: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.21: Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names ============================ ctx_names EE' Names
< Ctxs2: apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.21: Variables: Names FE EE EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : is_list (is_list (is_pair is_string is_value)) EE3 Ctxs1 : ctx_names EE3 Names Ctxs2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.22: Variables: Names T FE V EE' X IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transE Names (name X) T Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V ============================ ctx_names EE' Names
< search. Subgoal 5.1.23: Variables: Names T FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (call Fun Args) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.23: Variables: Names T FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.23: Variables: Names FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 ============================ ctx_names EE' Names
< apply IH_A to _ _ _ _ _ Trans Ev2. Subgoal 5.1.23: Variables: Names FE EE V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 H3 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.24: Variables: Names T FE EE V EE' O EE3 O2 Scope O3 E1 S IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (stmtExpr S E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.24: Variables: Names T FE EE V EE' O EE3 O2 Scope O3 E1 S IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 ============================ ctx_names EE' Names
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< apply ctx_names_add_scope to Ctxs. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names ([]::EE) ([]::Names) ============================ ctx_names EE' Names
< apply IH_S to _ _ _ _ _ Trans Ev1. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names ([]::EE) ([]::Names) H5 : ctx_names EE3 Names2 ============================ ctx_names EE' Names
< apply transS_isNames to _ _ Trans. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names ([]::EE) ([]::Names) H5 : ctx_names EE3 Names2 H6 : is_list (is_list is_string) Names2 ============================ ctx_names EE' Names
< Ctxs': apply IH_E to _ _ _ _ _ Trans1 Ev2. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names ([]::EE) ([]::Names) H5 : ctx_names EE3 Names2 H6 : is_list (is_list is_string) Names2 Ctxs' : ctx_names (Scope::EE') Names2 ============================ ctx_names EE' Names
< case Ctxs'. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S E3 S2 BRest B IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 (B::BRest) Trans1 : transE (B::BRest) E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names ([]::EE) ([]::Names) H5 : ctx_names EE3 (B::BRest) H6 : is_list (is_list is_string) (B::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE' BRest ============================ ctx_names EE' Names
< apply transS_old_scopes to _ _ Trans. Subgoal 5.1.24: Variables: Names FE EE V EE' O EE3 O2 Scope O3 E1 S E3 S2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 (Scope'::Names) Trans1 : transE (Scope'::Names) E1 E3 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names ([]::EE) ([]::Names) H5 : ctx_names EE3 (Scope'::Names) H6 : is_list (is_list is_string) (Scope'::Names) H7 : forall K I, mem (K, I) Scope -> mem K Scope' H8 : forall K, mem K Scope' -> exists I, mem (K, I) Scope H9 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.25: Variables: Names T FE EE EE' O VF RF IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.25: Variables: Names T FE EE EE' O VF RF IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.25: Variables: Names FE EE EE' O VF RF RF2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 ============================ ctx_names EE' Names
< apply IH_RF to _ _ _ _ _ Trans Ev1. Subgoal 5.1.25: Variables: Names FE EE EE' O VF RF RF2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 H2 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.26: Variables: Names T FE EE V EE' O Fields F Rec IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr (recFieldAccess Rec F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V ============================ ctx_names EE' Names
< case IsE. Subgoal 5.1.26: Variables: Names T FE EE V EE' O Fields F Rec IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.26: Variables: Names FE EE V EE' O Fields F Rec E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.1.26: Variables: Names FE EE V EE' O Fields F Rec E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 H3 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transE Names <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T ============================ ctx_names EE' Names
< apply join_is to _ Trans. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T H1 : is_list is_string N ============================ ctx_names EE' Names
< apply proj_expr_is to Trans1 _ _. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T H1 : is_list is_string N H2 : is_expr E_P1 ============================ ctx_names EE' Names
< apply proj_expr_unique_ctx_names to _ _ _ _ Trans Ev1 Trans1 Ev2. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P ============================ ctx_names EE' Names
< C: apply IH_E to _ _ _ _ _ Trans2 Ev3. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P C : ctx_names EE_P Names ============================ ctx_names EE' Names
< SS: apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 5.1.27: Variables: Names T FE EE V EE' O Names1 E_P V_P EE_P O_P N EE'' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P C : ctx_names EE_P Names SS : evalExpr FE EE E_P V EE'' O SS1 : scopes_same EE' EE'' ============================ ctx_names EE' Names
< apply evalExpr_unique to _ _ _ SS Ev3. Subgoal 5.1.27: Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P C : ctx_names EE_P Names SS : evalExpr FE EE E_P V_P EE_P O_P SS1 : scopes_same EE' EE_P ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ SS. Subgoal 5.1.27: Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P C : ctx_names EE_P Names SS : evalExpr FE EE E_P V_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 5.1.27: Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P C : ctx_names EE_P Names SS : evalExpr FE EE E_P V_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ ctx_names EE' Names
< apply ctx_names_scopes_same to _ _ C SS1. Subgoal 5.1.27: Variables: Names T FE EE EE' Names1 E_P V_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string N H2 : is_expr E_P C : ctx_names EE_P Names SS : evalExpr FE EE E_P V_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.2.1: Variables: Names T Names' FE Scope EE IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ ctx_names (Scope::EE) Names'
< case Trans. Subgoal 5.2.1: Variables: Names' FE Scope EE IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ ctx_names (Scope::EE) Names'
< search. Subgoal 5.2.2: Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.2: Variables: Names T Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ ctx_names EE' Names'
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 5.2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< apply transS_isNames to _ _ Trans. Subgoal 5.2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) Names3 ============================ ctx_names EE' Names'
< C: apply IH_S to _ _ _ _ _ Trans Ev1. Subgoal 5.2.2: Variables: Names Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) Names3 C : ctx_names EE3 Names3 ============================ ctx_names EE' Names'
< case Ctxs (keep). Subgoal 5.2.2: Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 BRest B IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) Names3 C : ctx_names EE3 Names3 H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans. Subgoal 5.2.2: Variables: Names' FE Scope EE EE' O EE3 O2 O3 S2 S1 S21 S11 BRest B Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_list (is_list is_string) (Scope'::BRest) C : ctx_names EE3 (Scope'::BRest) H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest ============================ ctx_names EE' Names'
< case C (keep). Subgoal 5.2.2: Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_list (is_list is_string) (Scope'::BRest) C : ctx_names (A::ARest) (Scope'::BRest) H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest H8 : forall K I, mem (K, I) A -> mem K Scope' H9 : forall K, mem K Scope' -> exists I, mem (K, I) A H10 : ctx_names ARest BRest ============================ ctx_names EE' Names'
< apply IH_S to _ _ _ _ _ Trans1 Ev2. Subgoal 5.2.2: Variables: Names' FE Scope EE EE' O O2 O3 S2 S1 S21 S11 BRest B Scope' ARest A IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B::BRest) Ctxs : ctx_names (Scope::EE) (B::BRest) Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_list (is_list is_string) (Scope'::BRest) C : ctx_names (A::ARest) (Scope'::BRest) H5 : forall K I, mem (K, I) Scope -> mem K B H6 : forall K, mem K B -> exists I, mem (K, I) Scope H7 : ctx_names EE BRest H8 : forall K I, mem (K, I) A -> mem K Scope' H9 : forall K, mem K Scope' -> exists I, mem (K, I) A H10 : ctx_names ARest BRest H11 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.3: Variables: Names T Names' FE Scope EE O EE2 Scope1 V X E Ty IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * ============================ ctx_names (((X, V)::Scope1)::EE2) Names'
< case IsS. Subgoal 5.2.3: Variables: Names T Names' FE Scope EE O EE2 Scope1 V X E Ty IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ ctx_names (((X, V)::Scope1)::EE2) Names'
< Trans: case Trans. Subgoal 5.2.3: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 ============================ ctx_names (((X, V)::Scope1)::EE2) ((X::Scope2)::Names1)
< C: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.3: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : ctx_names (Scope1::EE2) (Scope2::Names1) ============================ ctx_names (((X, V)::Scope1)::EE2) ((X::Scope2)::Names1)
< C: case C. Subgoal 5.2.3: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 ============================ ctx_names (((X, V)::Scope1)::EE2) ((X::Scope2)::Names1)
< unfold . Subgoal 5.2.3.1: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 ============================ forall K I, mem (K, I) ((X, V)::Scope1) -> mem K (X::Scope2)
< intros M. Subgoal 5.2.3.1: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 M : mem (K, I) ((X, V)::Scope1) ============================ mem K (X::Scope2)
< M: case M. Subgoal 5.2.3.1.1: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 ============================ mem X (X::Scope2)
< search. Subgoal 5.2.3.1.2: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 M : mem (K, I) Scope1 ============================ mem K (X::Scope2)
< apply C to M. Subgoal 5.2.3.1.2: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 M : mem (K, I) Scope1 H4 : mem K Scope2 ============================ mem K (X::Scope2)
< search. Subgoal 5.2.3.2: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 ============================ forall K, mem K (X::Scope2) -> exists I, mem (K, I) ((X, V)::Scope1)
< intros M. Subgoal 5.2.3.2: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 M : mem K (X::Scope2) ============================ exists I, mem (K, I) ((X, V)::Scope1)
< M: case M. Subgoal 5.2.3.2.1: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 ============================ exists I, mem (X, I) ((X, V)::Scope1)
< search. Subgoal 5.2.3.2.2: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 M : mem K Scope2 ============================ exists I, mem (K, I) ((X, V)::Scope1)
< apply C1 to M. Subgoal 5.2.3.2.2: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 K I IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 M : mem K Scope2 H4 : mem (K, I) Scope1 ============================ exists I, mem (K, I) ((X, V)::Scope1)
< search. Subgoal 5.2.3.3: Variables: FE Scope EE O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (Scope2::Names1) Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 C : forall K I, mem (K, I) Scope1 -> mem K Scope2 C1 : forall K, mem K Scope2 -> exists I, mem (K, I) Scope1 C2 : ctx_names EE2 Names1 ============================ ctx_names EE2 Names1
< search. Subgoal 5.2.4: Variables: Names T Names' FE Scope EE EE' O V EE3 E X IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.4: Variables: Names T Names' FE Scope EE EE' O V EE3 E X IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.4: Variables: Names' FE Scope EE EE' O V EE3 E X E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 ============================ ctx_names EE' Names'
< C: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.4: Variables: Names' FE Scope EE EE' O V EE3 E X E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 C : ctx_names EE3 Names' ============================ ctx_names EE' Names'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.4: Variables: Names' FE Scope EE EE' O V EE3 E X E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 C : ctx_names EE3 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< apply ctx_names_replaceScopes to _ _ C Ev2. Subgoal 5.2.4: Variables: Names' FE Scope EE EE' O V EE3 E X E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 C : ctx_names EE3 Names' H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.5: Variables: Names T Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.5: Variables: Names T Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.5: Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 ============================ ctx_names EE' Names'
< C: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.5: Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 C : ctx_names EE3 Names' ============================ ctx_names EE' Names'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.5: Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 C : ctx_names EE3 Names' H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< apply ctx_names_replaceScopes to _ _ C Ev4. Subgoal 5.2.5: Variables: Names' FE Scope EE EE' O V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 C : ctx_names EE3 Names' H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.6: Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.6: Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ ctx_names EE' Names'
< C: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' ============================ ctx_names EE' Names'
< C+: apply ctx_names_add_scope to C. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') ============================ ctx_names EE' Names'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< C': apply IH_S to _ _ _ _ _ Trans1 Ev2. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 C' : ctx_names (Scope1::EE') NamesTh ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans1. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 (Scope'::Names') Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 C' : ctx_names (Scope1::EE') (Scope'::Names') ============================ ctx_names EE' Names'
< case C'. Subgoal 5.2.6: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesEl El2 Th2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 (Scope'::Names') Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : forall K I, mem (K, I) Scope1 -> mem K Scope' H6 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H7 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.7: Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.7: Variables: Names T Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ ctx_names EE' Names'
< C: apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' ============================ ctx_names EE' Names'
< C+: apply ctx_names_add_scope to C. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') ============================ ctx_names EE' Names'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names'
< C': apply IH_S to _ _ _ _ _ Trans2 Ev2. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 C' : ctx_names (Scope1::EE') NamesEl ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans2. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 (Scope'::Names') C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 C' : ctx_names (Scope1::EE') (Scope'::Names') ============================ ctx_names EE' Names'
< case C'. Subgoal 5.2.7: Variables: Names' FE Scope EE EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh El2 Th2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 (Scope'::Names') C : ctx_names EE3 Names' C+ : ctx_names ([]::EE3) ([]::Names') H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : forall K I, mem (K, I) Scope1 -> mem K Scope' H6 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H7 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.8: Variables: Names T Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.8: Variables: Names T Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ ctx_names EE' Names'
< Trans: case Trans (keep). Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ ctx_names EE' Names'
< C: apply IH_E to _ _ _ _ _ Trans1 Ev1. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 C : ctx_names EE2 Names' ============================ ctx_names EE' Names'
< C+: apply ctx_names_add_scope to C. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') ============================ ctx_names EE' Names'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') H3 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ ctx_names EE' Names'
< C': apply IH_S to _ _ _ _ _ Trans2 Ev2. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') H3 : is_list (is_list (is_pair is_string is_value)) EE2 C' : ctx_names (Scope1::EE4) Names2 ============================ ctx_names EE' Names'
< C'': case C'. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 BRest B IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B::BRest) C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K B C''1 : forall K, mem K B -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 BRest ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans2. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'::Names') C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 Names' ============================ ctx_names EE' Names'
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'::Names') C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 Names' IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4) ============================ ctx_names EE' Names'
< case IsEE4+. Subgoal 5.2.8: Variables: Names' FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (Scope'::Names') C : ctx_names EE2 Names' C+ : ctx_names ([]::EE2) ([]::Names') H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 Names' H4 : is_list (is_pair is_string is_value) Scope1 H5 : is_list (is_list (is_pair is_string is_value)) EE4 ============================ ctx_names EE' Names'
< case Ctxs. Subgoal 5.2.8: Variables: FE Scope EE EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B1::BRest1) Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B1::BRest1) Cond Cond2 Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1)) C : ctx_names EE2 (B1::BRest1) C+ : ctx_names ([]::EE2) ([]::(B1::BRest1)) H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 (B1::BRest1) H4 : is_list (is_pair is_string is_value) Scope1 H5 : is_list (is_list (is_pair is_string is_value)) EE4 H6 : forall K I, mem (K, I) Scope -> mem K B1 H7 : forall K, mem K B1 -> exists I, mem (K, I) Scope H8 : ctx_names EE BRest1 ============================ ctx_names EE' (B1::BRest1)
< case C''2 (keep). Subgoal 5.2.8: Variables: FE Scope EE EE' O EE2 O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B1::BRest1) Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::(A::ARest)) O3 * Ev3 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B1::BRest1) Cond Cond2 Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1)) C : ctx_names EE2 (B1::BRest1) C+ : ctx_names ([]::EE2) ([]::(B1::BRest1)) H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B1::BRest1) H4 : is_list (is_pair is_string is_value) Scope1 H5 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H6 : forall K I, mem (K, I) Scope -> mem K B1 H7 : forall K, mem K B1 -> exists I, mem (K, I) Scope H8 : ctx_names EE BRest1 H9 : forall K I, mem (K, I) A -> mem K B1 H10 : forall K, mem K B1 -> exists I, mem (K, I) A H11 : ctx_names ARest BRest1 ============================ ctx_names EE' (B1::BRest1)
< apply IH_S to _ _ _ _ _ Trans Ev3. Subgoal 5.2.8: Variables: FE Scope EE EE' O EE2 O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 Scope' BRest1 B1 ARest A IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) (B1::BRest1) Trans : transS (B1::BRest1) (while Cond Body) (while Cond2 Body2) (B1::BRest1) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::(A::ARest)) O3 * Ev3 : evalStmt FE (A::ARest) (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B1::BRest1) Cond Cond2 Trans2 : transS ([]::(B1::BRest1)) Body Body2 (Scope'::(B1::BRest1)) C : ctx_names EE2 (B1::BRest1) C+ : ctx_names ([]::EE2) ([]::(B1::BRest1)) H3 : is_list (is_list (is_pair is_string is_value)) EE2 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A::ARest) (B1::BRest1) H4 : is_list (is_pair is_string is_value) Scope1 H5 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H6 : forall K I, mem (K, I) Scope -> mem K B1 H7 : forall K, mem K B1 -> exists I, mem (K, I) Scope H8 : ctx_names EE BRest1 H9 : forall K I, mem (K, I) A -> mem K B1 H10 : forall K, mem K B1 -> exists I, mem (K, I) A H11 : ctx_names ARest BRest1 H12 : ctx_names EE' (B1::BRest1) ============================ ctx_names EE' (B1::BRest1)
< search. Subgoal 5.2.9: Variables: Names T Names' FE Scope EE EE' O Body Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.9: Variables: Names T Names' FE Scope EE EE' O Body Cond IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.9: Variables: Names' FE Scope EE EE' O Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ ctx_names EE' Names'
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.9: Variables: Names' FE Scope EE EE' O Body Cond Names2 Body2 Cond2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 H3 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.10: Variables: Names T Names' FE Scope EE EE' O Scope1 S1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.10: Variables: Names T Names' FE Scope EE EE' O Scope1 S1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 Names2 S3 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ ctx_names EE' Names'
< apply transS_old_scopes to _ _ Trans. Subgoal 5.2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') ============================ ctx_names EE' Names'
< apply ctx_names_add_scope to Ctxs. Subgoal 5.2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ ctx_names EE' Names'
< C: apply IH_S to _ _ _ _ _ Trans Ev1. Subgoal 5.2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') H2 : ctx_names ([]::(Scope::EE)) ([]::Names') C : ctx_names (Scope1::EE') (Scope'::Names') ============================ ctx_names EE' Names'
< case C. Subgoal 5.2.10: Variables: Names' FE Scope EE EE' O Scope1 S1 S3 Scope' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 (Scope'::Names') H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : forall K I, mem (K, I) Scope1 -> mem K Scope' H4 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H5 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.11: Variables: Names T Names' FE Scope EE EE' O I O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.11: Variables: Names T Names' FE Scope EE EE' O I O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.11: Variables: Names' FE Scope EE EE' O I O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 ============================ ctx_names EE' Names'
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.11: Variables: Names' FE Scope EE EE' O I O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 H2 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.12: Variables: Names T Names' FE Scope EE EE' O O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.12: Variables: Names T Names' FE Scope EE EE' O O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.12: Variables: Names' FE Scope EE EE' O O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ ctx_names EE' Names'
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.12: Variables: Names' FE Scope EE EE' O O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 H2 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.13: Variables: Names T Names' FE Scope EE EE' O O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.13: Variables: Names T Names' FE Scope EE EE' O O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.13: Variables: Names' FE Scope EE EE' O O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ ctx_names EE' Names'
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.13: Variables: Names' FE Scope EE EE' O O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 H2 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.14: Variables: Names T Names' FE Scope EE EE' O S1 O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ ctx_names EE' Names'
< case IsS. Subgoal 5.2.14: Variables: Names T Names' FE Scope EE EE' O S1 O2 E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.14: Variables: Names' FE Scope EE EE' O S1 O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 ============================ ctx_names EE' Names'
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.2.14: Variables: Names' FE Scope EE EE' O S1 O2 E E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 H2 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ ctx_names EE' Names'
< Trans: case Trans. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ ctx_names EE' Names'
< apply join_is to _ Trans. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string N ============================ ctx_names EE' Names'
< apply proj_stmt_is to Trans1 _ _. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N S_P1 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string N H2 : is_stmt S_P1 ============================ ctx_names EE' Names'
< apply proj_stmt_unique_ctx_names to _ _ _ _ Trans Ev1 Trans1 Ev2. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P ============================ ctx_names EE' Names'
< C: apply IH_S to _ _ _ _ _ Trans2 Ev3. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' ============================ ctx_names EE' Names'
< SS: apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' O Names1 S_P EE_P O_P N EE'' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE'' O SS1 : scopes_same EE' EE'' ============================ ctx_names EE' Names'
< apply evalStmt_unique to _ _ _ SS Ev3. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P ============================ ctx_names EE' Names'
< apply evalStmt_isCtx to _ _ _ SS. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P ============================ ctx_names EE' Names'
< apply evalStmt_isCtx to _ _ _ Ev. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ ctx_names EE' Names'
< apply ctx_names_scopes_same to _ _ C SS1. Subgoal 5.2.15: Variables: Names T Names' FE Scope EE EE' Names1 S_P EE_P O_P N IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsNames : is_list (is_list is_string) Names Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string N H2 : is_stmt S_P C : ctx_names EE_P Names' SS : evalStmt FE (Scope::EE) S_P EE_P O_P SS1 : scopes_same EE' EE_P H3 : is_list (is_list (is_pair is_string is_value)) EE_P H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : ctx_names EE' Names' ============================ ctx_names EE' Names'
< search. Subgoal 5.3.1: Variables: Names T FE EE' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transA Names nilArgs T Ev : evalArgs FE EE' nilArgs [] EE' [] @ ============================ ctx_names EE' Names
< search. Subgoal 5.3.2: Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 Rest E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsA : is_args (consArgs E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsA. Subgoal 5.3.2: Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 Rest E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.3.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.3.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.3.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names EE3 Names ============================ ctx_names EE' Names
< apply IH_A to _ _ _ _ _ Trans1 Ev2. Subgoal 5.3.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : ctx_names EE3 Names H5 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.3.3: Variables: Names T FE EE V EE' O IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ ============================ ctx_names EE' Names
< Or: apply is_args_nilArgs_or_consArgs to IsA. Subgoal 5.3.3: Variables: Names T FE EE V EE' O IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ Or : <unknown K evalArgs> = nilArgs \/ (exists E A', <unknown K evalArgs> = consArgs E A') ============================ ctx_names EE' Names
< case Or. Subgoal 5.4.1: Variables: Names T FE EE' IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE' Names Trans : transRF Names nilRecFieldExprs T Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ ============================ ctx_names EE' Names
< search. Subgoal 5.4.2: Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 F Rest E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsRF : is_recFieldExprs (consRecFieldExprs F E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ ctx_names EE' Names
< case IsRF. Subgoal 5.4.2: Variables: Names T FE EE EE' O EE3 O2 O3 VRest V1 F Rest E IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest ============================ ctx_names EE' Names
< Trans: case Trans. Subgoal 5.4.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 ============================ ctx_names EE' Names
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.4.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ ctx_names EE' Names
< apply IH_E to _ _ _ _ _ Trans Ev1. Subgoal 5.4.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : ctx_names EE3 Names ============================ ctx_names EE' Names
< apply IH_RF to _ _ _ _ _ Trans1 Ev2. Subgoal 5.4.2: Variables: Names FE EE EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : ctx_names EE3 Names H6 : ctx_names EE' Names ============================ ctx_names EE' Names
< search. Subgoal 5.4.3: Variables: Names T FE EE V EE' O IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ ============================ ctx_names EE' Names
< Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF. Subgoal 5.4.3: Variables: Names T FE EE V EE' O IH_E : forall Names E T FE EE V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> ctx_names EE' Names IH_S : forall Names S T Names' FE Scope EE EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list is_string) Names -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> ctx_names EE' Names' IH_A : forall Names A T FE EE V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> ctx_names EE' Names IH_RF : forall Names RF T FE EE V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list is_string) Names -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> ctx_names EE' Names IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsEE : is_list (is_list (is_pair is_string is_value)) EE IsNames : is_list (is_list is_string) Names Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ Or : <unknown K evalRecFields> = nilRecFieldExprs \/ (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF') ============================ ctx_names EE' Names
< case Or. Proof completed.
< Define rel_FE : (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) -> (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) -> prop by rel_FE FE FE_T := (forall F RetVar RVVal PNames Body, lookup FE F (RetVar, RVVal, PNames, Body) -> exists Body_T Names, lookup FE_T F (RetVar, RVVal, PNames, Body_T) /\ transS [RetVar::PNames] Body Body_T Names) /\ (forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, RVVal, PNames, Body_T) -> exists Body Names, lookup FE F (RetVar, RVVal, PNames, Body) /\ transS [RetVar::PNames] Body Body_T Names).
< Theorem zip_ctx_names [A, B] : forall A B (Z : list (pair A B)), zip A B Z -> ctx_names [Z] [A]. ============================ forall A B Z, zip A B Z -> ctx_names [Z] [A]
< intros Z. Variables: A B Z Z : zip A B Z ============================ ctx_names [Z] [A]
< unfold . Subgoal 1: Variables: A B Z Z : zip A B Z ============================ forall K I, mem (K, I) Z -> mem K A
< intros M. Subgoal 1: Variables: A B Z K I Z : zip A B Z M : mem (K, I) Z ============================ mem K A
< apply zip_mem_after to Z M. Subgoal 1: Variables: A B Z K I Z : zip A B Z M : mem (K, I) Z H1 : mem K A H2 : mem I B ============================ mem K A
< search. Subgoal 2: Variables: A B Z Z : zip A B Z ============================ forall K, mem K A -> exists I, mem (K, I) Z
< intros M. Subgoal 2: Variables: A B Z K Z : zip A B Z M : mem K A ============================ exists I, mem (K, I) Z
< apply zip_mem_before1 to Z M. Subgoal 2: Variables: A B Z K B1 Z : zip A B Z M : mem K A H1 : mem (K, B1) Z ============================ exists I, mem (K, I) Z
< search. Subgoal 3: Variables: A B Z Z : zip A B Z ============================ ctx_names [] []
< search. Proof completed.
< Extensible_Theorem trans_evalExpr_same : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transE Names E T -> Ev : evalExpr FE EE E V EE' O -> EvT : evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T on Ev as IH_E, trans_evalExpr_relCtxs : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transE Names E T -> Ev : evalExpr FE EE E V EE' O -> EvT : evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' on Ev as IH_E_C, trans_evalStmt_same : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> EvT : evalStmt FE_T EE_T T EE_T' O_T -> O = O_T on Ev as IH_S, trans_evalStmt_relCtxs : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> EvT : evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' on Ev as IH_S_C, trans_evalArgs_same : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transA Names A T -> Ev : evalArgs FE EE A V EE' O -> EvT : evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T on Ev as IH_A, trans_evalArgs_relCtxs : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transA Names A T -> Ev : evalArgs FE EE A V EE' O -> EvT : evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' on Ev as IH_A_C, trans_evalRecFields_same : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transRF Names RF T -> Ev : evalRecFields FE EE RF V EE' O -> EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T on Ev as IH_RF, trans_evalRecFields_relCtxs : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transRF Names RF T -> Ev : evalRecFields FE EE RF V EE' O -> EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' on Ev as IH_RF_C. Subgoal 1: Variables: E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IsE : is_expr E IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names E T Ev : evalExpr FE EE E V EE' O EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
< search. Subgoal 2: Variables: E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IsE : is_expr E IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names E T Ev : evalExpr FE EE E V EE' O EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
< search. Subgoal 3: Variables: S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 4: Variables: S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 5: Variables: A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names A T Ev : evalArgs FE EE A V EE' O EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
< search. Subgoal 6: Variables: A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names A T Ev : evalArgs FE EE A V EE' O EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
< search. Subgoal 7: Variables: RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names RF T Ev : evalRecFields FE EE RF V EE' O EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
< search. Subgoal 8: Variables: RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names RF T Ev : evalRecFields FE EE RF V EE' O EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
< search. Subgoal 9.1.1: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T I IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (num I) T Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ intVal I = V_T /\ [] = O_T
< case Trans. Subgoal 9.1.1: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T I IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ EvT : evalExpr FE_T EE_T (num I) V_T EE_T' O_T ============================ intVal I = V_T /\ [] = O_T
< case EvT. Subgoal 9.1.1: Variables: Names FE FE_T EE' EE_T' I IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ ============================ intVal I = intVal I /\ [] = []
< search. Subgoal 9.1.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O ============================ intVal I = V_T /\ O = O_T
< case IsE. Subgoal 9.1.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ intVal I = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (plus E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ intVal I = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 + I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 + I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 + I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ intVal I = intVal I3 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 + I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 + I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 + I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 + I5 = I Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 + I5 = I Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O_T = O_T
< apply plus_integer_unique to Ev3 EvT2. Subgoal 9.1.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I3) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 + I5 = I3 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I3 = intVal I3 /\ O_T = O_T
< search. Subgoal 9.1.3: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O ============================ intVal I = V_T /\ O = O_T
< case IsE. Subgoal 9.1.3: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ intVal I = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (minus E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ intVal I = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 - I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 - I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 - I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ intVal I = intVal I3 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 - I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 - I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 - I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 - I5 = I Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 - I5 = I Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O_T = O_T
< apply minus_integer_unique to Ev3 EvT2. Subgoal 9.1.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I3) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 - I5 = I3 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I3 = intVal I3 /\ O_T = O_T
< search. Subgoal 9.1.4: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O ============================ intVal I = V_T /\ O = O_T
< case IsE. Subgoal 9.1.4: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ intVal I = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (mult E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ intVal I = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 * I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 * I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 * I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ intVal I = intVal I3 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 * I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 * I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 * I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 * I5 = I Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 * I5 = I Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O_T = O_T
< apply multiply_integer_unique to Ev3 EvT2. Subgoal 9.1.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I3) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 * I5 = I3 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I3 = intVal I3 /\ O_T = O_T
< search. Subgoal 9.1.5: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O ============================ intVal I = V_T /\ O = O_T
< case IsE. Subgoal 9.1.5: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ intVal I = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (div E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ intVal I = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 / I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 / I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 / I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ intVal I = intVal I3 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 / I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 / I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ intVal I = intVal I3 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I4 / I2 = I Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 / I5 = I Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 / I5 = I Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I = intVal I3 /\ O_T = O_T
< apply divide_integer_unique to Ev3 EvT2. Subgoal 9.1.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I3) EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I5) EE' O4 * Ev3 : I4 / I5 = I3 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ intVal I3 = intVal I3 /\ O_T = O_T
< search. Subgoal 9.1.6: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names true T Ev : evalExpr FE EE' true trueVal EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ trueVal = V_T /\ [] = O_T
< case Trans. Subgoal 9.1.6: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' true trueVal EE' [] @ EvT : evalExpr FE_T EE_T true V_T EE_T' O_T ============================ trueVal = V_T /\ [] = O_T
< case EvT. Subgoal 9.1.6: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' true trueVal EE' [] @ ============================ trueVal = trueVal /\ [] = []
< search. Subgoal 9.1.7: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names false T Ev : evalExpr FE EE' false falseVal EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ falseVal = V_T /\ [] = O_T
< case Trans. Subgoal 9.1.7: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' false falseVal EE' [] @ EvT : evalExpr FE_T EE_T false V_T EE_T' O_T ============================ falseVal = V_T /\ [] = O_T
< case EvT. Subgoal 9.1.7: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' false falseVal EE' [] @ ============================ falseVal = falseVal /\ [] = []
< search. Subgoal 9.1.8: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ trueVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.8: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ trueVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.8: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ trueVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O_T @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O_T = O_T
< search. Subgoal 9.1.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.9: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ falseVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.9: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ falseVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.9: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ falseVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.9.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.9.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.9.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O_T @ Ev1 : evalExpr FE EE E1 falseVal EE' O_T * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ falseVal = falseVal /\ O_T = O_T
< search. Subgoal 9.1.9.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.10: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ falseVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.10: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ falseVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.10: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ falseVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.10.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O_T @ Ev1 : evalExpr FE EE E1 trueVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O_T = O_T
< search. Subgoal 9.1.11: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ trueVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.11: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ trueVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.11: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ trueVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.11.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.11.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O_T @ Ev1 : evalExpr FE EE E1 trueVal EE' O_T * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ trueVal = trueVal /\ O_T = O_T
< search. Subgoal 9.1.11.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.11.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.12: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ trueVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.12: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ trueVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.12: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ trueVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.12.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O_T @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O_T = O_T
< search. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.13: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ falseVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.13: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ falseVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.13: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ falseVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.13.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O_T @ Ev1 : evalExpr FE EE E1 falseVal EE3 O1 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O_T = O_T
< search. Subgoal 9.1.14: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ trueVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.14: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 ============================ trueVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.14: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ trueVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.14.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.14.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O_T @ Ev1 : evalExpr FE EE E1 falseVal EE' O_T * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T ============================ trueVal = trueVal /\ O_T = O_T
< search. Subgoal 9.1.14.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.15: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ falseVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.15: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 ============================ falseVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.15: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ falseVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.15.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.15.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.15.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O_T @ Ev1 : evalExpr FE EE E1 trueVal EE' O_T * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T ============================ falseVal = falseVal /\ O_T = O_T
< search. Subgoal 9.1.16: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O ============================ trueVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.16: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ trueVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.16: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ trueVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 > I4 Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 > I4 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O_T = O_T
< search. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 > I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 > I4 Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = falseVal /\ O = O_T
< L: case Ev3. Subgoal 9.1.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names L : I4 < I3 ============================ trueVal = falseVal /\ O = O_T
< apply less_lesseq_flip_false to L EvT2. Subgoal 9.1.17: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O ============================ falseVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.17: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ falseVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.17: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ falseVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 <= I4 Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = trueVal /\ O = O_T
< L: case EvT2. Subgoal 9.1.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 <= I4 Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names L : I4 < I3 ============================ falseVal = trueVal /\ O = O_T
< apply less_lesseq_flip_false to L Ev3. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I3 <= I2 Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 <= I4 Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O_T @ Ev1 : evalExpr FE EE E1 (intVal I3) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (intVal I4) EE' O4 * Ev3 : I3 <= I4 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O_T = O_T
< search. Subgoal 9.1.18: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O ============================ trueVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.18: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ trueVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.18: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ trueVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ trueVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O_T @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = trueVal /\ O_T = O_T
< search. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T ============================ trueVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ trueVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ trueVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V2 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V3 EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V3 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ trueVal = falseVal /\ O = O_T
< apply EvT2 to _. Subgoal 9.1.19: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O ============================ falseVal = V_T /\ O = O_T
< case IsE. Subgoal 9.1.19: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ falseVal = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.19: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ falseVal = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ falseVal = trueVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = trueVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = trueVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = trueVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V3 EE' O4 * Ev3 : V3 = V3 -> false Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = trueVal /\ O = O_T
< apply Ev3 to _. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T ============================ falseVal = falseVal /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ falseVal = falseVal /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ falseVal = falseVal /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V3 = V2 -> false Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V4 EE' O4 * Ev3 : V3 = V4 -> false Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O_T @ Ev1 : evalExpr FE EE E1 V3 EE3 O1 * Ev2 : evalExpr FE EE3 E2 V4 EE' O4 * Ev3 : V3 = V4 -> false Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ falseVal = falseVal /\ O_T = O_T
< search. Subgoal 9.1.20: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (stringLit S) T Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ stringVal S = V_T /\ [] = O_T
< case Trans. Subgoal 9.1.20: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ EvT : evalExpr FE_T EE_T (stringLit S) V_T EE_T' O_T ============================ stringVal S = V_T /\ [] = O_T
< case EvT. Subgoal 9.1.20: Variables: Names FE FE_T EE' EE_T' S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ ============================ stringVal S = stringVal S /\ [] = []
< search. Subgoal 9.1.21: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O ============================ stringVal S = V_T /\ O = O_T
< case IsE. Subgoal 9.1.21: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ stringVal S = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ EvT : evalExpr FE_T EE_T (appString E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ stringVal S = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T ============================ stringVal S = stringVal S3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S4 ++ S2 = S Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T ============================ stringVal S = stringVal S3 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S4 ++ S2 = S Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ stringVal S = stringVal S3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S4 ++ S2 = S Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ stringVal S = stringVal S3 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S4 ++ S2 = S Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ stringVal S = stringVal S3 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S4 ++ S2 = S Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ stringVal S = stringVal S3 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S4 ++ S2 = S Ev4 : O1 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ stringVal S = stringVal S3 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S5) EE' O4 * Ev3 : S4 ++ S5 = S Ev4 : O1 ++ O4 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ stringVal S = stringVal S3 /\ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O_T @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S5) EE' O4 * Ev3 : S4 ++ S5 = S Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ stringVal S = stringVal S3 /\ O_T = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S3) EE' O_T @ Ev1 : evalExpr FE EE E1 (stringVal S4) EE3 O1 * Ev2 : evalExpr FE EE3 E2 (stringVal S5) EE' O4 * Ev3 : S4 ++ S5 = S3 Ev4 : O1 ++ O4 = O_T H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ stringVal S3 = stringVal S3 /\ O_T = O_T
< search. Subgoal 9.1.22: Variables: T Names EE_T FE FE_T V V_T EE' EE_T' O_T X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (name X) T Ev : evalExpr FE EE' (name X) V EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookupScopes X EE' V ============================ V = V_T /\ [] = O_T
< case IsE. Subgoal 9.1.22: Variables: T Names EE_T FE FE_T V V_T EE' EE_T' O_T X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (name X) T Ev : evalExpr FE EE' (name X) V EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookupScopes X EE' V H1 : is_string X ============================ V = V_T /\ [] = O_T
< case Trans. Subgoal 9.1.22: Variables: Names EE_T FE FE_T V V_T EE' EE_T' O_T X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V EE' [] @ EvT : evalExpr FE_T EE_T (name X) V_T EE_T' O_T Ev1 : lookupScopes X EE' V H1 : is_string X ============================ V = V_T /\ [] = O_T
< EvT: case EvT. Subgoal 9.1.22: Variables: Names FE FE_T V V_T EE' EE_T' X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V H1 : is_string X EvT : lookupScopes X EE_T' V_T ============================ V = V_T /\ [] = []
< apply scopes_same_lookupScopes to _ _ SS Ev1 EvT. Subgoal 9.1.22: Variables: Names FE FE_T V_T EE' EE_T' X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V_T EE' [] @ Ev1 : lookupScopes X EE' V_T H1 : is_string X EvT : lookupScopes X EE_T' V_T ============================ V_T = V_T /\ [] = []
< search. Subgoal 9.1.23: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (call Fun Args) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V ============================ V = V_T /\ O = O_T
< case IsE. Subgoal 9.1.23: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args ============================ V = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ EvT : evalExpr FE_T EE_T (call Fun A1) V_T EE_T' O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 ============================ V = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T ============================ V = V_T /\ O = O_T
< R: case RFE (keep). Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ V = V_T /\ O = O_T
< L_T: apply R to Ev1. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names L_T : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ V = V_T /\ O = O_T
< apply lookup_unique to EvT L_T. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names L_T : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ V = V_T /\ O = O_T
< clear L_T R R1. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ V = V_T /\ O = O_T
< apply IH_A to _ _ _ _ _ _ _ _ _ Trans Ev2 EvT1. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body InitEnv EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ V = V_T /\ O = O_T
< apply zip_unique to Ev3 EvT2. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ V = V_T /\ O = O_T
< apply evalArgs_isValue to _ _ _ Ev2. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 ============================ V = V_T /\ O = O_T
< IsP: apply lookup_is_value_funCtx to _ Ev1. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body))) ============================ V = V_T /\ O = O_T
< IsP: case IsP. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body)) ============================ V = V_T /\ O = O_T
< IsP: case IsP1. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body) ============================ V = V_T /\ O = O_T
< IsP: case IsP2. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body ============================ V = V_T /\ O = O_T
< apply zip_is to _ _ Ev3. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 ============================ V = V_T /\ O = O_T
< Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1). Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) ============================ V = V_T /\ O = O_T
< apply zip_ctx_names to Z. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 O3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O3 * Ev5 : O1 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] ============================ V = V_T /\ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] ============================ V = V_T /\ O = O_T
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ L_T1 Ev4 EvT3. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] SS' : scopes_same EE3 EE1 ============================ V = V_T /\ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] SS' : scopes_same EE3 EE1 ============================ V = V_T /\ O_T = O_T
< apply evalStmt_isCtx to _ _ _ Ev4. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] SS' : scopes_same EE3 EE1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ V = V_T /\ O_T = O_T
< apply transS_is to _ _ L_T1. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] SS' : scopes_same EE3 EE1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_stmt Body_T ============================ V = V_T /\ O_T = O_T
< apply evalStmt_isCtx to _ _ _ EvT3. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] SS' : scopes_same EE3 EE1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_stmt Body_T H8 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ V = V_T /\ O_T = O_T
< apply scopes_same_lookupScopes to _ _ _ Ev6 EvT5. Subgoal 9.1.23: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O_T RetVar RVVal ArgNames Body EE3 Args Fun A1 ArgVals1 O1 InitEnv1 EE1 O4 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V_T EE' O_T @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals1 EE' O1 * Ev3 : zip ArgNames ArgVals1 InitEnv1 Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv1] Body EE3 O4 * Ev5 : O1 ++ O4 = O_T Ev6 : lookupScopes RetVar EE3 V_T H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv1] Body_T EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar EE1 V_T L_T1 : transS [RetVar::ArgNames] Body Body_T Names1 H3 : is_list is_value ArgVals1 IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body H4 : is_list (is_pair is_string is_value) InitEnv1 Z : zip (RetVar::ArgNames) (RVVal::ArgVals1) ((RetVar, RVVal)::InitEnv1) H5 : ctx_names [(RetVar, RVVal)::InitEnv1] [RetVar::ArgNames] SS' : scopes_same EE3 EE1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_stmt Body_T H8 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ V_T = V_T /\ O_T = O_T
< search. Subgoal 9.1.24: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stmtExpr S E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O ============================ V = V_T /\ O = O_T
< case IsE. Subgoal 9.1.24: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 ============================ V = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ EvT : evalExpr FE_T EE_T (stmtExpr S2 E3) V_T EE_T' O_T Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 ============================ V = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ V = V_T /\ O = O_T
< apply ctx_names_add_scope to Ctxs. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) ============================ V = V_T /\ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) ============================ V = V_T /\ O = O_T
< apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 ============================ V = V_T /\ O = O_T
< apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 ============================ V = V_T /\ O = O_T
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ V = V_T /\ O = O_T
< apply transS_isNames to _ _ Trans. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list is_string) Names2 ============================ V = V_T /\ O = O_T
< apply transS_is to _ _ Trans. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list is_string) Names2 H8 : is_stmt S2 ============================ V = V_T /\ O = O_T
< apply evalStmt_isCtx to _ _ _ EvT. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list is_string) Names2 H8 : is_stmt S2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ V = V_T /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 Scope E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V_T EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V_T (Scope::EE') O4 * Ev3 : O1 ++ O4 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list is_string) Names2 H8 : is_stmt S2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ V_T = V_T /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.1.24: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O_T EE3 Scope E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V_T EE' O_T @ Ev1 : evalStmt FE ([]::EE) S EE3 O1 * Ev2 : evalExpr FE EE3 E1 V_T (Scope::EE') O4 * Ev3 : O1 ++ O4 = O_T H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : ctx_names EE3 Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list is_string) Names2 H8 : is_stmt S2 H9 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ V_T = V_T /\ O_T = O_T
< search. Subgoal 9.1.25: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalRecFields FE EE RF VF EE' O * ============================ recVal VF = V_T /\ O = O_T
< case IsE. Subgoal 9.1.25: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF ============================ recVal VF = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.25: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF RF2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ EvT : evalExpr FE_T EE_T (recBuild RF2) V_T EE_T' O_T Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 ============================ recVal VF = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.25: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T VF RF RF2 VF1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T ============================ recVal VF = recVal VF1 /\ O = O_T
< apply IH_RF to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.25: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T RF RF2 VF1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF1) EE' O_T @ Ev1 : evalRecFields FE EE RF VF1 EE' O_T * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T ============================ recVal VF1 = recVal VF1 /\ O_T = O_T
< search. Subgoal 9.1.26: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (recFieldAccess Rec F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V ============================ V = V_T /\ O = O_T
< case IsE. Subgoal 9.1.26: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F ============================ V = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.26: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ EvT : evalExpr FE_T EE_T (recFieldAccess E2 F) V_T EE_T' O_T Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 ============================ V = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.1.26: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 Fields1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T EvT1 : lookup Fields1 F V_T ============================ V = V_T /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.1.26: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O_T F Rec E2 Fields1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O_T @ Ev1 : evalExpr FE EE Rec (recVal Fields1) EE' O_T * Ev2 : lookup Fields1 F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T EvT1 : lookup Fields1 F V_T ============================ V = V_T /\ O_T = O_T
< apply lookup_unique to Ev2 EvT1. Subgoal 9.1.26: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O_T F Rec E2 Fields1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V_T EE' O_T @ Ev1 : evalExpr FE EE Rec (recVal Fields1) EE' O_T * Ev2 : lookup Fields1 F V_T H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T EvT1 : lookup Fields1 F V_T ============================ V_T = V_T /\ O_T = O_T
< search. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * ============================ V = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T ============================ V = V_T /\ O = O_T
< apply names_is to _ Ev1. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T H1 : is_list is_string Names1 ============================ V = V_T /\ O = O_T
< apply proj_expr_is to Ev2 _ _. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T H1 : is_list is_string Names1 H2 : is_expr E_P ============================ V = V_T /\ O = O_T
< apply proj_expr_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P ============================ V = V_T /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P EE_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_T EE_P O_T * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P ============================ V = V_T /\ O = O_T
< Ev': apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P EE_P N EE'' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_T EE_P O_T * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P Ev' : evalExpr FE EE E_P V EE'' O Ev'1 : scopes_same EE' EE'' ============================ V = V_T /\ O = O_T
< apply evalExpr_unique to _ _ _ Ev' Ev3. Subgoal 9.1.27: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O_T Names1 E_P EE_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_T EE' O_T @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_T EE_P O_T * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P Ev' : evalExpr FE EE E_P V_T EE_P O_T Ev'1 : scopes_same EE' EE_P ============================ V_T = V_T /\ O_T = O_T
< search. Subgoal 9.2.1: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T I IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (num I) T Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.2.1: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T I IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ EvT : evalExpr FE_T EE_T (num I) V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.2.1: Variables: Names FE FE_T EE' EE_T' I IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (plus E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 + I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.3: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.3: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (minus E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 - I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.4: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.4: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (mult E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.4: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 * I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.5: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.5: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ EvT : evalExpr FE_T EE_T (div E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.5: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 I E2 E1 E21 E11 I4 EE1 O1 I5 O4 I3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I5) EE_T' O4 EvT2 : I4 / I5 = I3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.6: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names true T Ev : evalExpr FE EE' true trueVal EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.2.6: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' true trueVal EE' [] @ EvT : evalExpr FE_T EE_T true V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.2.6: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' true trueVal EE' [] @ ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.7: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names false T Ev : evalExpr FE EE' false falseVal EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.2.7: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' false falseVal EE' [] @ EvT : evalExpr FE_T EE_T false V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.2.7: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' false falseVal EE' [] @ ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.8: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.8: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.8: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.8.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.8.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.9: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.9: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.9: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.9.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.9.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.9.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.9.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.10: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.10: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.10: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (and E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.10.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.10.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.10.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.11: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.11: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.11: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.11.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.11.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.11.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.11.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E2 E1 E21 E11 EE3 O2 O3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE3 O2 EvT1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 EvT2 : O2 ++ O3 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.12: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.12: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.12: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.12.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.12.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.12.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.13: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.13: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.13: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (or E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.13.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 trueVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.13.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 trueVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.13.3: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 E2 E1 E21 E11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 falseVal EE1 O1 EvT1 : evalExpr FE_T EE1 E21 falseVal EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.14: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.14: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.14: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.14.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.14.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.14.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.15: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.15: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.15: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ EvT : evalExpr FE_T EE_T (not E3) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.15.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.15.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.15.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 EvT : evalExpr FE_T EE_T E3 trueVal EE_T' O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.16: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.16: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.16: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.16.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.16.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.17: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.17: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.17: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (greater E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.17.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 > I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.17.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T I1 EE3 O2 I2 O3 E2 E1 E21 E11 I3 EE1 O1 I4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (intVal I3) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (intVal I4) EE_T' O4 EvT2 : I3 <= I4 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.18: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.18: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.18: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.18.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V2 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.18.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 O3 E2 E1 E21 E11 V2 EE1 O1 V3 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V2 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : V2 = V3 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.19: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.19: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.19: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ EvT : evalExpr FE_T EE_T (eq E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.19.1: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V3 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.19.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T V1 EE3 O2 V2 O3 E2 E1 E21 E11 V3 EE1 O1 V4 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 V3 EE1 O1 EvT1 : evalExpr FE_T EE1 E21 V4 EE_T' O4 EvT2 : V3 = V4 -> false EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.20: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (stringLit S) T Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.2.20: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ EvT : evalExpr FE_T EE_T (stringLit S) V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.2.20: Variables: Names FE FE_T EE' EE_T' S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.21: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.21: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ EvT : evalExpr FE_T EE_T (appString E11 E21) V_T EE_T' O_T Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.21: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T S1 EE3 O2 S2 O3 S E2 E1 E21 E11 S4 EE1 O1 S5 O4 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvT : evalExpr FE_T EE_T E11 (stringVal S4) EE1 O1 EvT1 : evalExpr FE_T EE1 E21 (stringVal S5) EE_T' O4 EvT2 : S4 ++ S5 = S3 EvT3 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.22: Variables: T Names EE_T FE FE_T V V_T EE' EE_T' O_T X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (name X) T Ev : evalExpr FE EE' (name X) V EE' [] @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookupScopes X EE' V ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.2.22: Variables: Names EE_T FE FE_T V V_T EE' EE_T' O_T X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V EE' [] @ EvT : evalExpr FE_T EE_T (name X) V_T EE_T' O_T Ev1 : lookupScopes X EE' V ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.2.22: Variables: Names FE FE_T V V_T EE' EE_T' X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V H1 : lookupScopes X EE_T' V_T ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.23: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (call Fun Args) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.23: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ EvT : evalExpr FE_T EE_T (call Fun A1) V_T EE_T' O_T Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T ============================ scopes_same EE' EE_T'
< apply IH_A_C to _ _ _ _ _ _ _ _ _ Trans Ev2 EvT1. Subgoal 9.2.23: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 RetVar1 RVVal1 ArgNames1 Body1 ArgVals1 O1 InitEnv1 EE1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 EvT : lookup FE_T Fun (RetVar1, (RVVal1, (ArgNames1, Body1))) EvT1 : evalArgs FE_T EE_T A1 ArgVals1 EE_T' O1 EvT2 : zip ArgNames1 ArgVals1 InitEnv1 EvT3 : evalStmt FE_T [(RetVar1, RVVal1)::InitEnv1] Body1 EE1 O4 EvT4 : O1 ++ O4 = O_T EvT5 : lookupScopes RetVar1 EE1 V_T H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.24: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (stmtExpr S E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.24: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ EvT : evalExpr FE_T EE_T (stmtExpr S2 E3) V_T EE_T' O_T Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply ctx_names_add_scope to Ctxs. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) ============================ scopes_same EE' EE_T'
< apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transS_is to _ _ Trans. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_stmt S2 ============================ scopes_same EE' EE_T'
< apply evalStmt_isCtx to _ _ _ EvT. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_stmt S2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_stmt S2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names2 ============================ scopes_same EE' EE_T'
< apply transS_isNames to _ _ Trans. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_stmt S2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names2 H9 : is_list (is_list is_string) Names2 ============================ scopes_same EE' EE_T'
< SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_stmt S2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names2 H9 : is_list (is_list is_string) Names2 SS' : scopes_same (Scope::EE') (Scope1::EE_T') ============================ scopes_same EE' EE_T'
< case SS'. Subgoal 9.2.24: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T EE3 O2 Scope O3 E1 S Names2 E3 S2 EE1 O1 Scope1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 EvT : evalStmt FE_T ([]::EE_T) S2 EE1 O1 EvT1 : evalExpr FE_T EE1 E3 V_T (Scope1::EE_T') O4 EvT2 : O1 ++ O4 = O_T H3 : ctx_names ([]::EE) ([]::Names) H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_stmt S2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names2 H9 : is_list (is_list is_string) Names2 H10 : forall X V, lookup Scope X V -> lookup Scope1 X V H11 : forall X V, lookup Scope1 X V -> lookup Scope X V H12 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.25: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalRecFields FE EE RF VF EE' O * ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.25: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.25: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T VF RF RF2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ EvT : evalExpr FE_T EE_T (recBuild RF2) V_T EE_T' O_T Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.25: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T VF RF RF2 VF1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_RF_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.25: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T VF RF RF2 VF1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 EvT : evalRecFields FE_T EE_T RF2 VF1 EE_T' O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.26: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr (recFieldAccess Rec F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V ============================ scopes_same EE' EE_T'
< case IsE. Subgoal 9.2.26: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.26: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ EvT : evalExpr FE_T EE_T (recFieldAccess E2 F) V_T EE_T' O_T Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.2.26: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 Fields1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T EvT1 : lookup Fields1 F V_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.2.26: Variables: Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Fields F Rec E2 Fields1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 EvT : evalExpr FE_T EE_T E2 (recVal Fields1) EE_T' O_T EvT1 : lookup Fields1 F V_T H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T ============================ scopes_same EE' EE_T'
< apply names_is to _ Ev1. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T H1 : is_list is_string Names1 ============================ scopes_same EE' EE_T'
< apply proj_expr_is to Ev2 _ _. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T H1 : is_list is_string Names1 H2 : is_expr E_P ============================ scopes_same EE' EE_T'
< apply proj_expr_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P ============================ scopes_same EE' EE_T'
< SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P SS' : scopes_same EE_P EE_T' ============================ scopes_same EE' EE_T'
< Ev': apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T Names1 E_P V_P EE_P O_P N EE'' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P SS' : scopes_same EE_P EE_T' Ev' : evalExpr FE EE E_P V EE'' O Ev'1 : scopes_same EE' EE'' ============================ scopes_same EE' EE_T'
< apply evalExpr_unique to _ _ _ Ev' Ev3. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O_T Names1 E_P V_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P SS' : scopes_same EE_P EE_T' Ev' : evalExpr FE EE E_P V_P EE_P O_P Ev'1 : scopes_same EE' EE_P ============================ scopes_same EE' EE_T'
< apply scopes_same_trans to Ev'1 SS'. Subgoal 9.2.27: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O_T Names1 E_P V_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ EvT : evalExpr FE_T EE_T T V_T EE_T' O_T Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H1 : is_list is_string Names1 H2 : is_expr E_P SS' : scopes_same EE_P EE_T' Ev' : evalExpr FE EE E_P V_P EE_P O_P Ev'1 : scopes_same EE' EE_P H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.3.1: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ [] = O_T
< case Trans. Subgoal 9.3.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T noop EE_T' O_T ============================ [] = O_T
< case EvT. Subgoal 9.3.1: Variables: Names' Scope EE FE FE_T EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ [] = []
< search. Subgoal 9.3.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ O = O_T
< case IsS. Subgoal 9.3.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T (seq S11 S21) EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 ============================ O = O_T
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ O = O_T
< apply transS_is to _ _ Trans. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 ============================ O = O_T
< apply transS_isNames to _ _ Trans. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 ============================ O = O_T
< apply evalStmt_isCtx to _ _ _ EvT. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.3.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 ============================ O = O_T
< case Ctxs. Subgoal 9.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 BRest B IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ O = O_T
< apply transS_old_scopes to _ _ Trans. Subgoal 9.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O1 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ O = O_T
< case C (keep). Subgoal 9.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 * Ev2 : evalStmt FE (A::ARest) S2 EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.3.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O_T @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O1 * Ev2 : evalStmt FE (A::ARest) S2 EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ O_T = O_T
< search. Subgoal 9.3.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * ============================ O = O_T
< case IsS. Subgoal 9.3.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.3: Variables: Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.3: Variables: Scope EE EE_T FE FE_T O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.3: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T ============================ O_T = O_T
< search. Subgoal 9.3.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' ============================ O = O_T
< case IsS. Subgoal 9.3.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T (assign X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' ============================ O_T = O_T
< search. Subgoal 9.3.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' ============================ O = O_T
< case IsS. Subgoal 9.3.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V1 FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' ============================ O_T = O_T
< search. Subgoal 9.3.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ O = O_T
< case IsS. Subgoal 9.3.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.6: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 ============================ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 ============================ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' ============================ O = O_T
< apply ctx_names_add_scope to C. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ O = O_T
< SS': apply IH_S to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O4 * Ev3 : O1 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.3.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ O_T = O_T
< search. Subgoal 9.3.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ O = O_T
< case IsS. Subgoal 9.3.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.7: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 ============================ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 ============================ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' ============================ O = O_T
< apply ctx_names_add_scope to C. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O1 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ O = O_T
< SS': apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O4 * Ev3 : O1 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.3.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 Scope1 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O1 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ O_T = O_T
< search. Subgoal 9.3.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O ============================ O = O_T
< case IsS. Subgoal 9.3.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ O = O_T
< Trans: case Trans (keep). Subgoal 9.3.8: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T ============================ O = O_T
< SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 ============================ O = O_T
< apply transE_is to _ _ Trans1. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 ============================ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ O = O_T
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 Ev1. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' ============================ O = O_T
< apply ctx_names_add_scope to C. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') ============================ O = O_T
< SS'': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') SS'' : scopes_same (Scope1::EE4) (Scope2::EE3) ============================ O = O_T
< case SS''. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 ============================ O = O_T
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4) ============================ O = O_T
< case IsEE4+. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 ============================ O = O_T
< apply transS_is to _ _ Trans2. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 ============================ O = O_T
< IsEE3+: apply evalStmt_isCtx to _ _ _ EvT1. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE3) ============================ O = O_T
< case IsEE3+. Subgoal 9.3.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ O = O_T
< case Ctxs (keep). Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O1 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 (B::BRest) H6 : ctx_names ([]::EE2) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest ============================ O = O_T
< case C (keep). Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest ============================ O = O_T
< case SS' (keep). Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 ============================ O = O_T
< apply transS_old_scopes to _ _ Trans2. Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 ============================ O = O_T
< C'': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev2. Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : ctx_names (Scope1::EE4) (Scope'::(B::BRest)) ============================ O = O_T
< C'': case C''. Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 (B::BRest) ============================ O = O_T
< case C''2 (keep). Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same (A1::ARest1) EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A1::ARest1) (B::BRest) H24 : forall K I, mem (K, I) A1 -> mem K B H25 : forall K, mem K B -> exists I, mem (K, I) A1 H26 : ctx_names ARest1 BRest ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev3 EvT2. Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O6 * Ev4 : O1 ++ O5 = O12 Ev5 : O12 ++ O6 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same (A1::ARest1) EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A1::ARest1) (B::BRest) H24 : forall K I, mem (K, I) A1 -> mem K B H25 : forall K, mem K B -> exists I, mem (K, I) A1 H26 : ctx_names ARest1 BRest ============================ O = O_T
< apply append_unique to Ev4 EvT3. Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O6 * Ev4 : O1 ++ O5 = O7 Ev5 : O7 ++ O6 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same (A1::ARest1) EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A1::ARest1) (B::BRest) H24 : forall K I, mem (K, I) A1 -> mem K B H25 : forall K, mem K B -> exists I, mem (K, I) A1 H26 : ctx_names ARest1 BRest ============================ O = O_T
< apply append_unique to Ev5 EvT4. Subgoal 9.3.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O_T Scope1 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O1 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O6 * Ev4 : O1 ++ O5 = O7 Ev5 : O7 ++ O6 = O_T H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same (A1::ARest1) EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A1::ARest1) (B::BRest) H24 : forall K I, mem (K, I) A1 -> mem K B H25 : forall K, mem K B -> exists I, mem (K, I) A1 H26 : ctx_names ARest1 BRest ============================ O_T = O_T
< search. Subgoal 9.3.8.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 9.3.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * ============================ O = O_T
< case IsS. Subgoal 9.3.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.9: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.9.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 EE2 O2 Scope1 EE4 O3 O4 O12 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE2 O2 EvT1 : evalStmt FE_T ([]::EE2) Body2 (Scope1::EE4) O3 EvT2 : evalStmt FE_T EE4 (while Cond2 Body2) EE_T' O4 EvT3 : O2 ++ O3 = O12 EvT4 : O12 ++ O4 = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.9.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.9.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O_T * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T ============================ O_T = O_T
< search. Subgoal 9.3.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ O = O_T
< case IsS. Subgoal 9.3.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T (scopeStmt S3) EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T ============================ O = O_T
< apply ctx_names_add_scope to Ctxs. Subgoal 9.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O_T @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O_T * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ O_T = O_T
< search. Subgoal 9.3.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O ============================ O = O_T
< case IsS. Subgoal 9.3.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.11: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.11.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 I1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1 EvT1 : O1 ++ [intVal I1] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.11.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 I1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I1) EE' O1 * Ev2 : O1 ++ [intVal I1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1 EvT1 : O1 ++ [intVal I1] = O_T ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 9.3.11.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 I1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E (intVal I1) EE' O1 * Ev2 : O1 ++ [intVal I1] = O_T H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1 EvT1 : O1 ++ [intVal I1] = O_T ============================ O_T = O_T
< search. Subgoal 9.3.11.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.11.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.11.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 S1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O ============================ O = O_T
< case IsS. Subgoal 9.3.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.12: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.12.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1 EvT1 : O1 ++ [intVal I] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.12.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.12.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O1 * Ev2 : O1 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 9.3.12.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O1 * Ev2 : O1 ++ [trueVal] = O_T H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O_T = O_T
< search. Subgoal 9.3.12.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.12.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O ============================ O = O_T
< case IsS. Subgoal 9.3.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.13: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.13.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1 EvT1 : O1 ++ [intVal I] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.13.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.13.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.13.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O1 * Ev2 : O1 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 9.3.13.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O1 * Ev2 : O1 ++ [falseVal] = O_T H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O_T = O_T
< search. Subgoal 9.3.13.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ O = O_T
< case IsS. Subgoal 9.3.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.14: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 ============================ O = O_T
< EvT: case EvT. Subgoal 9.3.14.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 I O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1 EvT1 : O1 ++ [intVal I] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.14.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.14.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.14.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 S2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1 EvT1 : O1 ++ [stringVal S2] = O_T ============================ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.3.14.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T E E2 S2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) EE' O1 * Ev2 : O1 ++ [stringVal S2] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1 EvT1 : O1 ++ [stringVal S2] = O_T ============================ O = O_T
< apply append_unique to Ev2 EvT1. Subgoal 9.3.14.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T E E2 S2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S2) EE' O1 * Ev2 : O1 ++ [stringVal S2] = O_T H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1 EvT1 : O1 ++ [stringVal S2] = O_T ============================ O_T = O_T
< search. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ O = O_T
< Trans: case Trans. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ O = O_T
< apply names_is to _ Ev1. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 ============================ O = O_T
< apply proj_stmt_is to Ev2 _ _. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ O = O_T
< apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ O = O_T
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ O = O_T
< Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P N EE'' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P Ev' : evalStmt FE (Scope::EE) S_P EE'' O Ev'1 : scopes_same EE' EE'' ============================ O = O_T
< apply evalStmt_unique to _ _ _ Ev' Ev3. Subgoal 9.3.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_T @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_T * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P Ev' : evalStmt FE (Scope::EE) S_P EE_P O_T Ev'1 : scopes_same EE' EE_P ============================ O_T = O_T
< search. Subgoal 9.4.1: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T T EE_T' O_T ============================ scopes_same (Scope::EE) EE_T'
< case Trans. Subgoal 9.4.1: Variables: Names' Scope EE EE_T FE FE_T EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ EvT : evalStmt FE_T EE_T noop EE_T' O_T ============================ scopes_same (Scope::EE) EE_T'
< case EvT. Subgoal 9.4.1: Variables: Names' Scope EE FE FE_T EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ scopes_same (Scope::EE) EE_T'
< search. Subgoal 9.4.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ EvT : evalStmt FE_T EE_T (seq S11 S21) EE_T' O_T Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transS_is to _ _ Trans. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 ============================ scopes_same EE' EE_T'
< apply transS_isNames to _ _ Trans. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 ============================ scopes_same EE' EE_T'
< apply evalStmt_isCtx to _ _ _ EvT. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< C: apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.4.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 ============================ scopes_same EE' EE_T'
< case Ctxs. Subgoal 9.4.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 Names3 S21 S11 EE1 O1 O4 BRest B IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) Names3 H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ scopes_same EE' EE_T'
< apply transS_old_scopes to _ _ Trans. Subgoal 9.4.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same EE3 EE1 H3 : is_list (is_list (is_pair is_string is_value)) EE3 H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ scopes_same EE' EE_T'
< case C (keep). Subgoal 9.4.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ scopes_same EE' EE_T'
< apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.4.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 O3 S2 S1 S21 S11 EE1 O1 O4 BRest B Scope' ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvT : evalStmt FE_T EE_T S11 EE1 O1 EvT1 : evalStmt FE_T EE1 S21 EE_T' O4 EvT2 : O1 ++ O4 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list is_string) (Scope'::BRest) H6 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * ============================ scopes_same (((X, V)::Scope1)::EE2) EE_T'
< case IsS. Subgoal 9.4.3: Variables: T Names Names' Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ scopes_same (((X, V)::Scope1)::EE2) EE_T'
< Trans: case Trans. Subgoal 9.4.3: Variables: Scope EE EE_T FE FE_T EE_T' O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ EvT : evalStmt FE_T EE_T (declare Ty X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 ============================ scopes_same (((X, V)::Scope1)::EE2) EE_T'
< EvT: case EvT. Subgoal 9.4.3: Variables: Scope EE EE_T FE FE_T O O_T EE2 Scope1 V X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T ============================ scopes_same (((X, V)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.3: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T ============================ scopes_same (((X, V1)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
< SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.3: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : scopes_same (Scope1::EE2) (Scope3::EE3) ============================ scopes_same (((X, V1)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
< SS': case SS'. Subgoal 9.4.3: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 ============================ scopes_same (((X, V1)::Scope1)::EE2) (((X, V1)::Scope3)::EE3)
< unfold . Subgoal 9.4.3.1: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 ============================ forall X1 V, lookup ((X, V1)::Scope1) X1 V -> lookup ((X, V1)::Scope3) X1 V
< intros L. Subgoal 9.4.3.1: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 L : lookup ((X, V1)::Scope1) X1 V2 ============================ lookup ((X, V1)::Scope3) X1 V2
< L: case L. Subgoal 9.4.3.1.1: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 E Ty Names1 Scope2 E2 EE3 Scope3 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V2)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V2 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V2 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 ============================ lookup ((X1, V2)::Scope3) X1 V2
< search. Subgoal 9.4.3.1.2: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 L : X = X1 -> false L1 : lookup Scope1 X1 V2 ============================ lookup ((X, V1)::Scope3) X1 V2
< apply SS' to L1. Subgoal 9.4.3.1.2: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 L : X = X1 -> false L1 : lookup Scope1 X1 V2 H4 : lookup Scope3 X1 V2 ============================ lookup ((X, V1)::Scope3) X1 V2
< search. Subgoal 9.4.3.2: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 ============================ forall X1 V, lookup ((X, V1)::Scope3) X1 V -> lookup ((X, V1)::Scope1) X1 V
< intros L. Subgoal 9.4.3.2: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 L : lookup ((X, V1)::Scope3) X1 V2 ============================ lookup ((X, V1)::Scope1) X1 V2
< L: case L. Subgoal 9.4.3.2.1: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 E Ty Names1 Scope2 E2 EE3 Scope3 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X1 E) (((X1, V2)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V2 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X1 H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V2 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 ============================ lookup ((X1, V2)::Scope1) X1 V2
< search. Subgoal 9.4.3.2.2: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 L : X = X1 -> false L1 : lookup Scope3 X1 V2 ============================ lookup ((X, V1)::Scope1) X1 V2
< apply SS'1 to L1. Subgoal 9.4.3.2.2: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 X1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 L : X = X1 -> false L1 : lookup Scope3 X1 V2 H4 : lookup Scope1 X1 V2 ============================ lookup ((X, V1)::Scope1) X1 V2
< search. Subgoal 9.4.3.3: Variables: Scope EE EE_T FE FE_T O_T EE2 Scope1 X E Ty Names1 Scope2 E2 EE3 Scope3 V1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V1)::Scope1)::EE2) O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 (Scope1::EE2) O_T * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvT : evalExpr FE_T EE_T E2 V1 (Scope3::EE3) O_T SS' : forall X V, lookup Scope1 X V -> lookup Scope3 X V SS'1 : forall X V, lookup Scope3 X V -> lookup Scope1 X V SS'2 : scopes_same EE2 EE3 ============================ scopes_same EE2 EE3
< search. Subgoal 9.4.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ EvT : evalStmt FE_T EE_T (assign X E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply scopes_same_replaceScopes_scopes_same to _ _ _ _ Ev2 EvT1. Subgoal 9.4.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E X E2 V1 EE1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : replaceScopes X V1 EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : replaceScopes X V1 EE1 EE_T' H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ EvT : evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T V EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V1 FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V1 FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V1 FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V1 FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 FieldVals NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V1 FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply scopes_same_lookupScopes to _ _ _ Ev2 EvT1. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 NewVals E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals1) Ev3 : updateRecFields Fields V1 FieldVals1 NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply updateRecFields_unique to Ev3 EvT2. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals1) Ev3 : updateRecFields Fields V1 FieldVals1 NewVals1 Ev4 : replaceScopes Rec (recVal NewVals1) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply scopes_same_replaceScopes_scopes_same to _ _ _ _ Ev4 EvT3. Subgoal 9.4.5: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O_T EE3 E Fields Rec E2 V1 EE1 FieldVals1 NewVals1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O_T @ Ev1 : evalExpr FE (Scope::EE) E V1 EE3 O_T * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals1) Ev3 : updateRecFields Fields V1 FieldVals1 NewVals1 Ev4 : replaceScopes Rec (recVal NewVals1) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 V1 EE1 O_T EvT1 : lookupScopes Rec EE_T (recVal FieldVals1) EvT2 : updateRecFields Fields V1 FieldVals1 NewVals1 EvT3 : replaceScopes Rec (recVal NewVals1) EE1 EE_T' H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.6: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' ============================ scopes_same EE' EE_T'
< apply ctx_names_add_scope to C. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ scopes_same EE' EE_T'
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') SS' : scopes_same (Scope1::EE') (Scope2::EE_T') ============================ scopes_same EE' EE_T'
< case SS'. Subgoal 9.4.6.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') H9 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H10 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H11 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.6.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.7: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ EvT : evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.7.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Th2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' ============================ scopes_same EE' EE_T'
< apply ctx_names_add_scope to C. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') ============================ scopes_same EE' EE_T'
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') SS' : scopes_same (Scope1::EE') (Scope2::EE_T') ============================ scopes_same EE' EE_T'
< case SS'. Subgoal 9.4.7.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE1 O1 Scope2 O4 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvT : evalExpr FE_T EE_T Cond2 falseVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) El2 (Scope2::EE_T') O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_expr Cond2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE3 Names' H8 : ctx_names ([]::EE3) ([]::Names') H9 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H10 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H11 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ scopes_same EE' EE_T'
< Trans: case Trans (keep). Subgoal 9.4.8: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T ============================ scopes_same EE' EE_T'
< SS': apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans1. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 Ev1. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' ============================ scopes_same EE' EE_T'
< apply ctx_names_add_scope to C. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') ============================ scopes_same EE' EE_T'
< apply IH_S to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') ============================ scopes_same EE' EE_T'
< SS'': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvT1. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') SS'' : scopes_same (Scope1::EE4) (Scope2::EE3) ============================ scopes_same EE' EE_T'
< case SS''. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 ============================ scopes_same EE' EE_T'
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4) ============================ scopes_same EE' EE_T'
< case IsEE4+. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 ============================ scopes_same EE' EE_T'
< apply transS_is to _ _ Trans2. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 ============================ scopes_same EE' EE_T'
< IsEE3+: apply evalStmt_isCtx to _ _ _ EvT1. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 IsEE3+ : is_list (is_list (is_pair is_string is_value)) (Scope2::EE3) ============================ scopes_same EE' EE_T'
< case IsEE3+. Subgoal 9.4.8.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< case Ctxs (keep). Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same EE2 EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names EE2 (B::BRest) H6 : ctx_names ([]::EE2) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest ============================ scopes_same EE' EE_T'
< case C (keep). Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 EE1 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE1 O1 EvT1 : evalStmt FE_T ([]::EE1) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) EE1 H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) EE1 C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest ============================ scopes_same EE' EE_T'
< case SS' (keep). Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Names2 Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 ============================ scopes_same EE' EE_T'
< apply transS_old_scopes to _ _ Trans2. Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 ============================ scopes_same EE' EE_T'
< C'': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev2. Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : ctx_names (Scope1::EE4) (Scope'::(B::BRest)) ============================ scopes_same EE' EE_T'
< C'': case C''. Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 EE4 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O5 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same EE4 EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) EE4 H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names EE4 (B::BRest) ============================ scopes_same EE' EE_T'
< case C''2 (keep). Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same (A1::ARest1) EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A1::ARest1) (B::BRest) H24 : forall K I, mem (K, I) A1 -> mem K B H25 : forall K, mem K B -> exists I, mem (K, I) A1 H26 : ctx_names ARest1 BRest ============================ scopes_same EE' EE_T'
< apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev3 EvT2. Subgoal 9.4.8.1: Variables: Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 Scope1 O4 O12 Body Cond Body2 Cond2 O1 Scope2 EE3 O5 O6 O7 BRest B ARest A BRest1 B1 Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (while Cond Body) (while Cond2 Body2) (B::BRest) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O5 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 * Ev4 : O2 ++ O5 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B::BRest) Cond Cond2 Trans2 : transS ([]::(B::BRest)) Body Body2 (Scope'::(B::BRest)) EvT : evalExpr FE_T EE_T Cond2 trueVal (B1::BRest1) O1 EvT1 : evalStmt FE_T ([]::(B1::BRest1)) Body2 (Scope2::EE3) O5 EvT2 : evalStmt FE_T EE3 (while Cond2 Body2) EE_T' O6 EvT3 : O1 ++ O5 = O7 EvT4 : O7 ++ O6 = O_T SS' : scopes_same (A::ARest) (B1::BRest1) H3 : is_expr Cond2 H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) C : ctx_names (A::ARest) (B::BRest) H6 : ctx_names ([]::(A::ARest)) ([]::(B::BRest)) H7 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H8 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H9 : scopes_same (A1::ARest1) EE3 H10 : is_list (is_pair is_string is_value) Scope1 H11 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H12 : is_stmt Body2 H13 : is_list (is_pair is_string is_value) Scope2 H14 : is_list (is_list (is_pair is_string is_value)) EE3 H15 : forall K I, mem (K, I) Scope -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) Scope H17 : ctx_names EE BRest H18 : forall K I, mem (K, I) A -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A H20 : ctx_names ARest BRest H21 : forall X V, lookup A X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A X V H23 : scopes_same ARest BRest1 C'' : forall K I, mem (K, I) Scope1 -> mem K Scope' C''1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C''2 : ctx_names (A1::ARest1) (B::BRest) H24 : forall K I, mem (K, I) A1 -> mem K B H25 : forall K, mem K B -> exists I, mem (K, I) A1 H26 : ctx_names ARest1 BRest H27 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.8.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvT. Subgoal 9.4.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.9: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ EvT : evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.9.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 EE2 O2 Scope1 EE4 O3 O4 O12 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 trueVal EE2 O2 EvT1 : evalStmt FE_T ([]::EE2) Body2 (Scope1::EE4) O3 EvT2 : evalStmt FE_T EE4 (while Cond2 Body2) EE_T' O4 EvT3 : O2 ++ O3 = O12 EvT4 : O12 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.9.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.9.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 EvT : evalExpr FE_T EE_T Cond2 falseVal EE_T' O_T H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ EvT : evalStmt FE_T EE_T (scopeStmt S3) EE_T' O_T Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T ============================ scopes_same EE' EE_T'
< apply ctx_names_add_scope to Ctxs. Subgoal 9.4.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ scopes_same EE' EE_T'
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') SS' : scopes_same (Scope1::EE') (Scope2::EE_T') ============================ scopes_same EE' EE_T'
< case SS'. Subgoal 9.4.10: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Scope1 S1 Names2 S3 Scope2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 EvT : evalStmt FE_T ([]::EE_T) S3 (Scope2::EE_T') O_T H2 : ctx_names ([]::(Scope::EE)) ([]::Names') H3 : forall X V, lookup Scope1 X V -> lookup Scope2 X V H4 : forall X V, lookup Scope2 X V -> lookup Scope1 X V H5 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.11: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.11.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 I1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1 EvT1 : O1 ++ [intVal I1] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.11.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 I1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I1) EE_T' O1 EvT1 : O1 ++ [intVal I1] = O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.11.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.11.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.11.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T I O2 E E2 S1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.12: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.12.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1 EvT1 : O1 ++ [intVal I] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.12.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.12.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.12.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.12.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.13: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.13.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 I O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1 EvT1 : O1 ++ [intVal I] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.13.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.13.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.13.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.13.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T O2 E E2 S1 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O1 EvT1 : O1 ++ [stringVal S1] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ scopes_same EE' EE_T'
< case IsS. Subgoal 9.4.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.14: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ EvT : evalStmt FE_T EE_T (printVal E2) EE_T' O_T Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.4.14.1: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 I O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (intVal I) EE_T' O1 EvT1 : O1 ++ [intVal I] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.14.2: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 trueVal EE_T' O1 EvT1 : O1 ++ [trueVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.14.3: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 falseVal EE_T' O1 EvT1 : O1 ++ [falseVal] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.14.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 S2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1 EvT1 : O1 ++ [stringVal S2] = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.4.14.4: Variables: Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T S1 O2 E E2 S2 O1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 EvT : evalExpr FE_T EE_T E2 (stringVal S2) EE_T' O1 EvT1 : O1 ++ [stringVal S2] = O_T H2 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ scopes_same EE' EE_T'
< apply names_is to _ Ev1. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 ============================ scopes_same EE' EE_T'
< apply proj_stmt_is to Ev2 _ _. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ scopes_same EE' EE_T'
< apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ scopes_same EE' EE_T'
< SS': apply IH_S_C to _ _ _ _ _ _ _ _ _ Trans2 Ev3 EvT. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P SS' : scopes_same EE_P EE_T' ============================ scopes_same EE' EE_T'
< Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T Names1 S_P EE_P O_P N EE'' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P SS' : scopes_same EE_P EE_T' Ev' : evalStmt FE (Scope::EE) S_P EE'' O Ev'1 : scopes_same EE' EE'' ============================ scopes_same EE' EE_T'
< apply evalStmt_unique to _ _ _ Ev' Ev3. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P SS' : scopes_same EE_P EE_T' Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P Ev'1 : scopes_same EE' EE_P ============================ scopes_same EE' EE_T'
< apply scopes_same_trans to Ev'1 SS'. Subgoal 9.4.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O_T Names1 S_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ EvT : evalStmt FE_T EE_T T EE_T' O_T Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H1 : is_list is_string Names1 H2 : is_stmt S_P SS' : scopes_same EE_P EE_T' Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P Ev'1 : scopes_same EE' EE_P H3 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.5.1: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transA Names nilArgs T Ev : evalArgs FE EE' nilArgs [] EE' [] @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ============================ [] = V_T /\ [] = O_T
< case Trans. Subgoal 9.5.1: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalArgs FE EE' nilArgs [] EE' [] @ EvT : evalArgs FE_T EE_T nilArgs V_T EE_T' O_T ============================ [] = V_T /\ [] = O_T
< case EvT. Subgoal 9.5.1: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalArgs FE EE' nilArgs [] EE' [] @ ============================ [] = [] /\ [] = []
< search. Subgoal 9.5.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args (consArgs E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ V1::VRest = V_T /\ O = O_T
< case IsA. Subgoal 9.5.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest ============================ V1::VRest = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ EvT : evalArgs FE_T EE_T (consArgs E2 A2) V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 ============================ V1::VRest = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ V1::VRest = V2::VRest1 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ V2::VRest = V2::VRest1 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ V2::VRest = V2::VRest1 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ V2::VRest = V2::VRest1 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 ============================ V2::VRest = V2::VRest1 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ V2::VRest = V2::VRest1 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ V2::VRest = V2::VRest1 /\ O = O_T
< apply IH_A to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest1) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest1 EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ V2::VRest1 = V2::VRest1 /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.5.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V2::VRest1) EE' O_T @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalArgs FE EE3 Rest VRest1 EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ V2::VRest1 = V2::VRest1 /\ O_T = O_T
< search. Subgoal 9.5.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ============================ V = V_T /\ O = O_T
< Or: apply is_args_nilArgs_or_consArgs to IsA. Subgoal 9.5.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T Or : <unknown K evalArgs> = nilArgs \/ (exists E A', <unknown K evalArgs> = consArgs E A') ============================ V = V_T /\ O = O_T
< case Or. Subgoal 9.6.1: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transA Names nilArgs T Ev : evalArgs FE EE' nilArgs [] EE' [] @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.6.1: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalArgs FE EE' nilArgs [] EE' [] @ EvT : evalArgs FE_T EE_T nilArgs V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.6.1: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalArgs FE EE' nilArgs [] EE' [] @ ============================ scopes_same EE' EE_T'
< search. Subgoal 9.6.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args (consArgs E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsA. Subgoal 9.6.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ EvT : evalArgs FE_T EE_T (consArgs E2 A2) V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_A_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.6.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 Rest E A2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalArgs FE_T EE1 A2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H3 : scopes_same EE3 EE1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_expr E2 H6 : is_list (is_list (is_pair is_string is_value)) EE1 H7 : ctx_names EE3 Names H8 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.6.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< Or: apply is_args_nilArgs_or_consArgs to IsA. Subgoal 9.6.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ EvT : evalArgs FE_T EE_T T V_T EE_T' O_T Or : <unknown K evalArgs> = nilArgs \/ (exists E A', <unknown K evalArgs> = consArgs E A') ============================ scopes_same EE' EE_T'
< case Or. Subgoal 9.7.1: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transRF Names nilRecFieldExprs T Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ============================ [] = V_T /\ [] = O_T
< case Trans. Subgoal 9.7.1: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ EvT : evalRecFields FE_T EE_T nilRecFieldExprs V_T EE_T' O_T ============================ [] = V_T /\ [] = O_T
< case EvT. Subgoal 9.7.1: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ ============================ [] = [] /\ [] = []
< search. Subgoal 9.7.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs (consRecFieldExprs F E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ (F, V1)::VRest = V_T /\ O = O_T
< case IsRF. Subgoal 9.7.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest ============================ (F, V1)::VRest = V_T /\ O = O_T
< Trans: case Trans. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ EvT : evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 ============================ (F, V1)::VRest = V_T /\ O = O_T
< EvT: case EvT. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ (F, V1)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply IH_E to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 ============================ (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply transE_is to _ _ Trans. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 ============================ (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O3 VRest F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O1 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names ============================ (F, V2)::VRest = (F, V2)::VRest1 /\ O = O_T
< apply IH_RF to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest1) EE' O @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest1 EE' O4 * Ev3 : O1 ++ O4 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names ============================ (F, V2)::VRest1 = (F, V2)::VRest1 /\ O = O_T
< apply append_unique to Ev3 EvT2. Subgoal 9.7.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O_T EE3 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V2)::VRest1) EE' O_T @ Ev1 : evalExpr FE EE E V2 EE3 O1 * Ev2 : evalRecFields FE EE3 Rest VRest1 EE' O4 * Ev3 : O1 ++ O4 = O_T H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names ============================ (F, V2)::VRest1 = (F, V2)::VRest1 /\ O_T = O_T
< search. Subgoal 9.7.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ============================ V = V_T /\ O = O_T
< Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF. Subgoal 9.7.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T Or : <unknown K evalRecFields> = nilRecFieldExprs \/ (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF') ============================ V = V_T /\ O = O_T
< case Or. Subgoal 9.8.1: Variables: T Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transRF Names nilRecFieldExprs T Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case Trans. Subgoal 9.8.1: Variables: Names EE_T FE FE_T V_T EE' EE_T' O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ EvT : evalRecFields FE_T EE_T nilRecFieldExprs V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< case EvT. Subgoal 9.8.1: Variables: Names FE FE_T EE' EE_T' IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T' Ctxs : ctx_names EE' Names Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ ============================ scopes_same EE' EE_T'
< search. Subgoal 9.8.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs (consRecFieldExprs F E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ scopes_same EE' EE_T'
< case IsRF. Subgoal 9.8.2: Variables: T Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest ============================ scopes_same EE' EE_T'
< Trans: case Trans. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T V_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ EvT : evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) V_T EE_T' O_T Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 ============================ scopes_same EE' EE_T'
< EvT: case EvT. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T ============================ scopes_same EE' EE_T'
< apply IH_E_C to _ _ _ _ _ _ _ _ _ Trans Ev1 EvT. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ scopes_same EE' EE_T'
< apply transE_is to _ _ Trans. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 ============================ scopes_same EE' EE_T'
< apply evalExpr_isCtx to _ _ _ EvT. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 ============================ scopes_same EE' EE_T'
< apply evalExpr_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names ============================ scopes_same EE' EE_T'
< apply IH_RF_C to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvT1. Subgoal 9.8.2: Variables: Names EE EE_T FE FE_T EE' EE_T' O O_T EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE1 O1 O4 VRest1 V2 IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvT : evalExpr FE_T EE_T E2 V2 EE1 O1 EvT1 : evalRecFields FE_T EE1 RF2 VRest1 EE_T' O4 EvT2 : O1 ++ O4 = O_T H4 : scopes_same EE3 EE1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE1 H8 : ctx_names EE3 Names H9 : scopes_same EE' EE_T' ============================ scopes_same EE' EE_T'
< search. Subgoal 9.8.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T ============================ scopes_same EE' EE_T'
< Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF. Subgoal 9.8.3: Variables: T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T IH_E : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_E_C : forall E T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> evalExpr FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> O = O_T IH_S_C : forall S T Names Names' Scope EE EE_T FE FE_T EE' EE_T' O O_T, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> evalStmt FE_T EE_T T EE_T' O_T -> scopes_same EE' EE_T' IH_A : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_A_C : forall A T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> evalArgs FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IH_RF : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> V = V_T /\ O = O_T IH_RF_C : forall RF T Names EE EE_T FE FE_T V V_T EE' EE_T' O O_T, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> evalRecFields FE_T EE_T T V_T EE_T' O_T -> scopes_same EE' EE_T' IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ EvT : evalRecFields FE_T EE_T T V_T EE_T' O_T Or : <unknown K evalRecFields> = nilRecFieldExprs \/ (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF') ============================ scopes_same EE' EE_T'
< case Or. Proof completed.
< Theorem paramTys_paramNames : forall Ps PTys D PNs, paramTys Ps PTys -> domain PTys D -> paramNames Ps PNs -> D = PNs. ============================ forall Ps PTys D PNs, paramTys Ps PTys -> domain PTys D -> paramNames Ps PNs -> D = PNs
< induction on 1. IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs ============================ forall Ps PTys D PNs, paramTys Ps PTys @ -> domain PTys D -> paramNames Ps PNs -> D = PNs
< intros PT D PN. Variables: Ps PTys D PNs IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTys Ps PTys @ D : domain PTys D PN : paramNames Ps PNs ============================ D = PNs
< PT: case PT. Subgoal 1: Variables: D PNs IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs D : domain [] D PN : paramNames [] PNs ============================ D = PNs
< case D. Subgoal 1: Variables: PNs IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PN : paramNames [] PNs ============================ [] = PNs
< case PN. Subgoal 1: IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs ============================ [] = []
< search. Subgoal 2: Variables: D PNs RestTys PTy PName Rest P IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs D : domain ((PName, PTy)::RestTys) D PN : paramNames (P::Rest) PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * ============================ D = PNs
< D: case D. Subgoal 2: Variables: PNs RestTys PTy PName Rest P DRest IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PN : paramNames (P::Rest) PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * D : domain RestTys DRest ============================ PName::DRest = PNs
< PN: case PN. Subgoal 2: Variables: RestTys PTy PName Rest P DRest NRest N IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * D : domain RestTys DRest PN : paramName P N PN1 : paramNames Rest NRest ============================ PName::DRest = N::NRest
< apply IH to PT1 D PN1. Subgoal 2: Variables: RestTys PTy PName Rest P NRest N IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTy P PName PTy PT1 : paramTys Rest RestTys * D : domain RestTys NRest PN : paramName P N PN1 : paramNames Rest NRest ============================ PName::NRest = N::NRest
< apply paramTy_paramName_same to PT PN. Subgoal 2: Variables: RestTys PTy Rest P NRest N IH : forall Ps PTys D PNs, paramTys Ps PTys * -> domain PTys D -> paramNames Ps PNs -> D = PNs PT : paramTy P N PTy PT1 : paramTys Rest RestTys * D : domain RestTys NRest PN : paramName P N PN1 : paramNames Rest NRest ============================ N::NRest = N::NRest
< search. Proof completed.
< Extensible_Theorem trans_getFunEvalInfo_rel : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, IsF : is_fun F -> Trans : transF F F_T -> GFEI : getFunEvalInfo F Name RetVar RVVal PNames Body -> GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N on Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body1) Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< case IsF. Subgoal 1: Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar1 H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body1 ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< G: case GFEI. Subgoal 1: Variables: Name RetVar RVVal PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Body2 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name RetTy RetVar RVVal Params Body) (fun Name RetTy RetVar RVVal Params Body2) @ GFEI_T : getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body2) Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body2 Names1 H1 : is_string Name H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value RVVal H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< GT: case GFEI_T. Subgoal 1: Variables: PNames Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar_T::Names] Body Body_T Names1 H1 : is_string Name_T H2 : is_typ RetTy H3 : is_string RetVar_T H4 : is_value RVVal_T H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames GT : paramNames Params PNames_T ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar_T::PNames] Body Body_T N
< apply paramNames_unique to _ G GT. Subgoal 1: Variables: Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names Names1 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar_T::Names] Body Body_T Names1 H1 : is_string Name_T H2 : is_typ RetTy H3 : is_string RetVar_T H4 : is_value RVVal_T H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames_T GT : paramNames Params PNames_T ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames_T = PNames_T) /\ transS [RetVar_T::PNames_T] Body Body_T N
< apply paramTys_paramNames to Trans1 Trans2 G. Subgoal 1: Variables: Body Name_T RetVar_T RVVal_T PNames_T Body_T PTys Names1 Params RetTy IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N Trans : transF (fun Name_T RetTy RetVar_T RVVal_T Params Body) (fun Name_T RetTy RetVar_T RVVal_T Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys PNames_T Trans3 : transS [RetVar_T::PNames_T] Body Body_T Names1 H1 : is_string Name_T H2 : is_typ RetTy H3 : is_string RetVar_T H4 : is_value RVVal_T H5 : is_list is_param Params H6 : is_stmt Body G : paramNames Params PNames_T GT : paramNames Params PNames_T ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames_T = PNames_T) /\ transS [RetVar_T::PNames_T] Body Body_T N
< search. Subgoal 2: Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< G': apply proj_getFunEvalInfo_forward to Trans1 _ GFEI. Subgoal 2: Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G' : getFunEvalInfo F_P Name RetVar RVVal PNames Body ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G' : getFunEvalInfo F_P Name RetVar RVVal PNames Body H1 : is_fun F_P ============================ exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N
< apply IH to _ Trans2 G' GFEI_T. Subgoal 2: Variables: Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T F_P N IH : forall F Name RetVar RVVal PNames Body F_T Name_T RetVar_T RVVal_T PNames_T Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T -> exists N, (((Name = Name_T /\ RetVar = RetVar_T) /\ RVVal = RVVal_T) /\ PNames = PNames_T) /\ transS [RetVar::PNames] Body Body_T N IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name_T RetVar_T RVVal_T PNames_T Body GFEI_T : getFunEvalInfo F_T Name_T RetVar_T RVVal_T PNames_T Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G' : getFunEvalInfo F_P Name_T RetVar_T RVVal_T PNames_T Body H1 : is_fun F_P H2 : transS [RetVar_T::PNames_T] Body Body_T N ============================ exists N, (((Name_T = Name_T /\ RetVar_T = RetVar_T) /\ RVVal_T = RVVal_T) /\ PNames_T = PNames_T) /\ transS [RetVar_T::PNames_T] Body Body_T N
< search. Proof completed.
< Theorem trans_getFunEvalCtx_rel_FE : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T. ============================ forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T
< induction on 2. IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T ============================ forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T
< intros IsFs Trans GFEI GFEI_T. Variables: Fs Fs_T FE FE_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun Fs Trans : transFuns Fs Fs_T @ GFEI : getFunEvalCtx Fs FE GFEI_T : getFunEvalCtx Fs_T FE_T ============================ rel_FE FE FE_T
< Trans: case Trans. Subgoal 1: Variables: FE FE_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] GFEI : getFunEvalCtx [] FE GFEI_T : getFunEvalCtx [] FE_T ============================ rel_FE FE FE_T
< case GFEI. Subgoal 1: Variables: FE_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] GFEI_T : getFunEvalCtx [] FE_T ============================ rel_FE [] FE_T
< case GFEI_T. Subgoal 1: IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] ============================ rel_FE [] []
< unfold . Subgoal 1.1: IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] ============================ forall F RetVar RVVal PNames Body, lookup [] F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup [] F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names
< intros L. Subgoal 1.1: Variables: F RetVar RVVal PNames Body IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] L : lookup [] F (RetVar, (RVVal, (PNames, Body))) ============================ exists Body_T Names, lookup [] F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names
< case L. Subgoal 1.2: IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] ============================ forall F RetVar RVVal PNames Body_T, lookup [] F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup [] F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names
< intros L. Subgoal 1.2: Variables: F RetVar RVVal PNames Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun [] L : lookup [] F (RetVar, (RVVal, (PNames, Body_T))) ============================ exists Body Names, lookup [] F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names
< case L. Subgoal 2: Variables: FE FE_T Rest1 F1 Rest F IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun (F::Rest) GFEI : getFunEvalCtx (F::Rest) FE GFEI_T : getFunEvalCtx (F1::Rest1) FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * ============================ rel_FE FE FE_T
< G: case GFEI. Subgoal 2: Variables: FE_T Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun (F::Rest) GFEI_T : getFunEvalCtx (F1::Rest1) FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest ============================ rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) FE_T
< GT: case GFEI_T. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T IsFs : is_list is_fun (F::Rest) Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 ============================ rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< case IsFs. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest ============================ rel_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< apply trans_getFunEvalInfo_rel to _ Trans G GT. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N ============================ rel_FE ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< R: apply IH to _ Trans1 G1 GT1. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 ============================ rel_FE ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1)
< unfold . Subgoal 2.1: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 ============================ forall F RetVar RVVal PNames Body2, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F (RetVar, (RVVal, (PNames, Body2))) -> exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body2 Body_T Names
< intros L. Subgoal 2.1: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< L: case L. Subgoal 2.1.1: Variables: Rest1 F1 Rest F CRest CRest1 Body1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F F2 RetVar2 RVVal2 PNames2 Body2 G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 F2 RetVar2 RVVal2 PNames2 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar2::PNames2] Body2 Body1 N R : rel_FE CRest CRest1 ============================ exists Body_T Names, lookup ((F2, (RetVar2, (RVVal2, (PNames2, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Subgoal 2.1.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : FName1 = F2 -> false L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< R: case R. Subgoal 2.1.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< apply R to L1. Subgoal 2.1.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body2 Body_T Names IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H4 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) H5 : transS [RetVar2::PNames2] Body2 Body_T Names ============================ exists Body_T Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Subgoal 2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 ============================ forall F RetVar RVVal PNames Body_T, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F (RetVar, (RVVal, (PNames, Body2))) /\ transS [RetVar::PNames] Body2 Body_T Names
< intros L. Subgoal 2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body1))))::CRest1) F2 (RetVar2, (RVVal2, (PNames2, Body_T))) ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< L: case L. Subgoal 2.2.1: Variables: Rest1 F1 Rest F CRest Body CRest1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F F2 RetVar2 RVVal2 PNames2 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 F2 RetVar2 RVVal2 PNames2 Body_T GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar2::PNames2] Body Body_T N R : rel_FE CRest CRest1 ============================ exists Body2 Names, lookup ((F2, (RetVar2, (RVVal2, (PNames2, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Subgoal 2.2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N R : rel_FE CRest CRest1 L : FName1 = F2 -> false L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< R: case R. Subgoal 2.2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< apply R1 to L1. Subgoal 2.2.2: Variables: Rest1 F1 Rest F CRest Body CRest1 Body1 PNames1 RVVal1 RetVar1 FName1 N F2 RetVar2 RVVal2 PNames2 Body_T Body2 Names IH : forall Fs Fs_T FE FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> getFunEvalCtx Fs_T FE_T -> rel_FE FE FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * G : getFunEvalInfo F FName1 RetVar1 RVVal1 PNames1 Body G1 : getFunEvalCtx Rest CRest GT : getFunEvalInfo F1 FName1 RetVar1 RVVal1 PNames1 Body1 GT1 : getFunEvalCtx Rest1 CRest1 H1 : is_fun F H2 : is_list is_fun Rest H3 : transS [RetVar1::PNames1] Body Body1 N L : FName1 = F2 -> false L1 : lookup CRest1 F2 (RetVar2, (RVVal2, (PNames2, Body_T))) R : forall F RetVar RVVal PNames Body, lookup CRest F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup CRest1 F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup CRest F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H4 : lookup CRest F2 (RetVar2, (RVVal2, (PNames2, Body2))) H5 : transS [RetVar2::PNames2] Body2 Body_T Names ============================ exists Body2 Names, lookup ((FName1, (RetVar1, (RVVal1, (PNames1, Body))))::CRest) F2 (RetVar2, (RVVal2, (PNames2, Body2))) /\ transS [RetVar2::PNames2] Body2 Body_T Names
< search. Proof completed.
< Extensible_Theorem trans_evalExpr_forward : forall E T Names EE EE_T FE FE_T V EE' O, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transE Names E T -> Ev : evalExpr FE EE E V EE' O -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O on Ev as IH_E, trans_evalStmt_forward : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> Ev : evalStmt FE (Scope::EE) S EE' O -> exists EE_T', evalStmt FE_T EE_T T EE_T' O on Ev as IH_S, trans_evalArgs_forward : forall A T Names EE EE_T FE FE_T V EE' O, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transA Names A T -> Ev : evalArgs FE EE A V EE' O -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O on Ev as IH_A, trans_evalRecFields_forward : forall RF T Names EE EE_T FE FE_T V EE' O, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transRF Names RF T -> Ev : evalRecFields FE EE RF V EE' O -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O on Ev as IH_RF. Subgoal 1: Variables: E T Names EE EE_T FE FE_T V EE' O IsE : is_expr E IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names E T Ev : evalExpr FE EE E V EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_expr E)
< search. Subgoal 2: Variables: S T Names Names' Scope EE EE_T FE FE_T EE' O IsS : is_stmt S IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names S T Names' Ev : evalStmt FE (Scope::EE) S EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) (Scope::EE) /\ is_stmt S)
< search. Subgoal 3: Variables: A T Names EE EE_T FE FE_T V EE' O IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names A T Ev : evalArgs FE EE A V EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_args A)
< search. Subgoal 4: Variables: RF T Names EE EE_T FE FE_T V EE' O IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names RF T Ev : evalRecFields FE EE RF V EE' O ============================ is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE /\ (is_list (is_list (is_pair is_string is_value)) EE /\ is_recFieldExprs RF)
< search. Subgoal 5.1.1: Variables: T Names EE_T FE FE_T EE' I IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (num I) T Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' []
< case Trans. Subgoal 5.1.1: Variables: Names EE_T FE FE_T EE' I IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (num I) (intVal I) EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T (num I) (intVal I) EE_T' []
< search. Subgoal 5.1.2: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< case IsE. Subgoal 5.1.2: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) T Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< Trans: case Trans. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.2: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (plus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 + I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (plus E11 E21) (intVal I) EE_T' O
< search. Subgoal 5.1.3: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< case IsE. Subgoal 5.1.3: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) T Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< Trans: case Trans. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.3: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (minus E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 - I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (minus E11 E21) (intVal I) EE_T' O
< search. Subgoal 5.1.4: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< case IsE. Subgoal 5.1.4: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) T Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< Trans: case Trans. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.4: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (mult E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 * I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (mult E11 E21) (intVal I) EE_T' O
< search. Subgoal 5.1.5: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< case IsE. Subgoal 5.1.5: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) T Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T (intVal I) EE_T' O
< Trans: case Trans. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.5: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 I E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (div E1 E2) (intVal I) EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 / I2 = I Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (div E11 E21) (intVal I) EE_T' O
< search. Subgoal 5.1.6: Variables: T Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names true T Ev : evalExpr FE EE' true trueVal EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' []
< case Trans. Subgoal 5.1.6: Variables: Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' true trueVal EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T true trueVal EE_T' []
< search. Subgoal 5.1.7: Variables: T Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names false T Ev : evalExpr FE EE' false falseVal EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' []
< case Trans. Subgoal 5.1.7: Variables: Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' false falseVal EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T false falseVal EE_T' []
< search. Subgoal 5.1.8: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< case IsE. Subgoal 5.1.8: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< Trans: case Trans. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.8: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 trueVal EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) trueVal EE_T' O
< search. Subgoal 5.1.9: Variables: T Names EE EE_T FE FE_T EE' O E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< case IsE. Subgoal 5.1.9: Variables: T Names EE EE_T FE FE_T EE' O E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< Trans: case Trans. Subgoal 5.1.9: Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.9: Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : evalExpr FE_T EE_T E11 falseVal EE_T' O ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< search. Subgoal 5.1.10: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< case IsE. Subgoal 5.1.10: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) T Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< Trans: case Trans. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.10: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (and E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 trueVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 falseVal EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (and E11 E21) falseVal EE_T' O
< search. Subgoal 5.1.11: Variables: T Names EE EE_T FE FE_T EE' O E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< case IsE. Subgoal 5.1.11: Variables: T Names EE EE_T FE FE_T EE' O E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< Trans: case Trans. Subgoal 5.1.11: Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.11: Variables: Names EE EE_T FE FE_T EE' O E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 H3 : evalExpr FE_T EE_T E11 trueVal EE_T' O ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< search. Subgoal 5.1.12: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< case IsE. Subgoal 5.1.12: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< Trans: case Trans. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.12: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 trueVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 trueVal EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) trueVal EE_T' O
< search. Subgoal 5.1.13: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< case IsE. Subgoal 5.1.13: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) T Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< Trans: case Trans. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.13: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (or E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE3 O2 * Ev2 : evalExpr FE EE3 E2 falseVal EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 falseVal EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 falseVal EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (or E11 E21) falseVal EE_T' O
< search. Subgoal 5.1.14: Variables: T Names EE EE_T FE FE_T EE' O E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< case IsE. Subgoal 5.1.14: Variables: T Names EE EE_T FE FE_T EE' O E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< Trans: case Trans. Subgoal 5.1.14: Variables: Names EE EE_T FE FE_T EE' O E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ exists EE_T', evalExpr FE_T EE_T (not E3) trueVal EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.14: Variables: Names EE EE_T FE FE_T EE' O E1 E3 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) trueVal EE' O @ Ev1 : evalExpr FE EE E1 falseVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 H2 : evalExpr FE_T EE_T E3 falseVal EE_T' O ============================ exists EE_T', evalExpr FE_T EE_T (not E3) trueVal EE_T' O
< search. Subgoal 5.1.15: Variables: T Names EE EE_T FE FE_T EE' O E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< case IsE. Subgoal 5.1.15: Variables: T Names EE EE_T FE FE_T EE' O E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) T Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< Trans: case Trans. Subgoal 5.1.15: Variables: Names EE EE_T FE FE_T EE' O E1 E3 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 ============================ exists EE_T', evalExpr FE_T EE_T (not E3) falseVal EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.15: Variables: Names EE EE_T FE FE_T EE' O E1 E3 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (not E1) falseVal EE' O @ Ev1 : evalExpr FE EE E1 trueVal EE' O * H1 : is_expr E1 Trans : transE Names E1 E3 H2 : evalExpr FE_T EE_T E3 trueVal EE_T' O ============================ exists EE_T', evalExpr FE_T EE_T (not E3) falseVal EE_T' O
< search. Subgoal 5.1.16: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< case IsE. Subgoal 5.1.16: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< Trans: case Trans. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.16: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 > I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) trueVal EE_T' O
< search. Subgoal 5.1.17: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< case IsE. Subgoal 5.1.17: Variables: T Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) T Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< Trans: case Trans. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.17: Variables: Names EE EE_T FE FE_T EE' O I1 EE3 O2 I2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (greater E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 (intVal I1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (intVal I2) EE' O3 * Ev3 : I1 <= I2 Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (intVal I1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (intVal I2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (greater E11 E21) falseVal EE_T' O
< search. Subgoal 5.1.18: Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< case IsE. Subgoal 5.1.18: Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T trueVal EE_T' O
< Trans: case Trans. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.18: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) trueVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V1 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 V1 EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) trueVal EE_T' O
< search. Subgoal 5.1.19: Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< case IsE. Subgoal 5.1.19: Variables: T Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) T Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T falseVal EE_T' O
< Trans: case Trans. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.19: Variables: Names EE EE_T FE FE_T EE' O V1 EE3 O2 V2 O3 E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (eq E1 E2) falseVal EE' O @ Ev1 : evalExpr FE EE E1 V1 EE3 O2 * Ev2 : evalExpr FE EE3 E2 V2 EE' O3 * Ev3 : V1 = V2 -> false Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 V2 EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (eq E11 E21) falseVal EE_T' O
< search. Subgoal 5.1.20: Variables: T Names EE_T FE FE_T EE' S IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (stringLit S) T Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T T (stringVal S) EE_T' []
< case Trans. Subgoal 5.1.20: Variables: Names EE_T FE FE_T EE' S IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (stringLit S) (stringVal S) EE' [] @ ============================ exists EE_T', evalExpr FE_T EE_T (stringLit S) (stringVal S) EE_T' []
< search. Subgoal 5.1.21: Variables: T Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T (stringVal S) EE_T' O
< case IsE. Subgoal 5.1.21: Variables: T Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) T Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE_T', evalExpr FE_T EE_T T (stringVal S) EE_T' O
< Trans: case Trans. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.1.21: Variables: Names EE EE_T FE FE_T EE' O S1 EE3 O2 S2 O3 S E2 E1 E21 E11 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (appString E1 E2) (stringVal S) EE' O @ Ev1 : evalExpr FE EE E1 (stringVal S1) EE3 O2 * Ev2 : evalExpr FE EE3 E2 (stringVal S2) EE' O3 * Ev3 : S1 ++ S2 = S Ev4 : O2 ++ O3 = O H1 : is_expr E1 H2 : is_expr E2 Trans : transE Names E1 E11 Trans1 : transE Names E2 E21 EvB1 : evalExpr FE_T EE_T E11 (stringVal S1) EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E11 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalExpr FE_T EE_T' E21 (stringVal S2) EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (appString E11 E21) (stringVal S) EE_T' O
< search. Subgoal 5.1.22: Variables: T Names EE_T FE FE_T V EE' X IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (name X) T Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' []
< case IsE. Subgoal 5.1.22: Variables: T Names EE_T FE FE_T V EE' X IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transE Names (name X) T Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V H1 : is_string X ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' []
< case Trans. Subgoal 5.1.22: Variables: Names EE_T FE FE_T V EE' X IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V H1 : is_string X ============================ exists EE_T', evalExpr FE_T EE_T (name X) V EE_T' []
< LT: apply scopes_same_lookupScopes_exists to _ _ SS Ev1. Subgoal 5.1.22: Variables: Names EE_T FE FE_T V EE' X IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalExpr FE EE' (name X) V EE' [] @ Ev1 : lookupScopes X EE' V H1 : is_string X LT : lookupScopes X EE_T V ============================ exists EE_T', evalExpr FE_T EE_T (name X) V EE_T' []
< search. Subgoal 5.1.23: Variables: T Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (call Fun Args) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< case IsE. Subgoal 5.1.23: Variables: T Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call Fun Args) T Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< Trans: case Trans. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< R: case RFE (keep). Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< LF: apply R to Ev1. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< clear R. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< EvB1: apply IH_A to _ _ _ _ _ _ RFE SS _ Trans Ev2. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv). Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< apply zip_ctx_names to Z. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< apply evalArgs_isValue to _ _ _ Ev2. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< IsP: apply lookup_is_value_funCtx to _ Ev1. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body))) ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< IsP: case IsP. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body)) ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< IsP: case IsP1. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body) ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< IsP: case IsP2. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< IsInitEnv: apply zip_is to _ _ Z. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< IsIE: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv]. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< SS_IE: apply scopes_same_reflexive to IsIE. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE SS_IE _ LF1 Ev4. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< R: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ LF1 Ev4 EvB2. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3 R : scopes_same EE3 EE_T'1 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< apply transS_is to _ _ LF1. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3 R : scopes_same EE3 EE_T'1 H5 : is_stmt Body_T ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< apply evalStmt_isCtx to _ _ _ EvB2. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3 R : scopes_same EE3 EE_T'1 H5 : is_stmt Body_T H6 : is_list (is_list (is_pair is_string is_value)) EE_T'1 ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< apply scopes_same_lookupScopes_exists to _ _ R Ev6. Subgoal 5.1.23: Variables: Names EE EE_T FE FE_T V EE' O RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Args Fun A1 Body_T Names1 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (call Fun Args) V EE' O @ Ev1 : lookup FE Fun (RetVar, (RVVal, (ArgNames, Body))) Ev2 : evalArgs FE EE Args ArgVals EE' O2 * Ev3 : zip ArgNames ArgVals InitEnv Ev4 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev5 : O2 ++ O3 = O Ev6 : lookupScopes RetVar EE3 V H1 : is_string Fun H2 : is_args Args Trans : transA Names Args A1 R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE_T Fun (RetVar, (RVVal, (ArgNames, Body_T))) LF1 : transS [RetVar::ArgNames] Body Body_T Names1 EvB1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RVVal)::InitEnv] SS_IE : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] EvB2 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body_T EE_T'1 O3 R : scopes_same EE3 EE_T'1 H5 : is_stmt Body_T H6 : is_list (is_list (is_pair is_string is_value)) EE_T'1 H7 : lookupScopes RetVar EE_T'1 V ============================ exists EE_T', evalExpr FE_T EE_T (call Fun A1) V EE_T' O
< search. Subgoal 5.1.24: Variables: T Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (stmtExpr S E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< case IsE. Subgoal 5.1.24: Variables: T Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) T Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< Trans: case Trans. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< apply ctx_names_add_scope to Ctxs. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< SS': apply scopes_same_add_scope to SS. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< EvB1: apply IH_S to _ _ _ _ _ _ RFE SS' _ Trans Ev1. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< apply transS_is to _ _ Trans. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< apply evalStmt_isCtx to _ _ _ EvB1. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< apply transS_isNames to _ _ Trans. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : is_list (is_list is_string) Names2 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : is_list (is_list is_string) Names2 C : ctx_names EE3 Names2 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< SS'': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : is_list (is_list is_string) Names2 C : ctx_names EE3 Names2 SS'' : scopes_same EE3 EE_T' ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< EvB2: apply IH_E to _ _ _ _ _ _ RFE SS'' _ Trans1 Ev2. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : is_list (is_list is_string) Names2 C : ctx_names EE3 Names2 SS'' : scopes_same EE3 EE_T' EvB2 : evalExpr FE_T EE_T' E3 V EE_T'1 O3 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< SS+: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvB2. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : is_list (is_list is_string) Names2 C : ctx_names EE3 Names2 SS'' : scopes_same EE3 EE_T' EvB2 : evalExpr FE_T EE_T' E3 V EE_T'1 O3 SS+ : scopes_same (Scope::EE') EE_T'1 ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< case SS+. Subgoal 5.1.24: Variables: Names EE EE_T FE FE_T V EE' O EE3 O2 Scope O3 E1 S Names2 E3 S2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (stmtExpr S E1) V EE' O @ Ev1 : evalStmt FE ([]::EE) S EE3 O2 * Ev2 : evalExpr FE EE3 E1 V (Scope::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S H2 : is_expr E1 Trans : transS ([]::Names) S S2 Names2 Trans1 : transE Names2 E1 E3 H3 : ctx_names ([]::EE) ([]::Names) SS' : scopes_same ([]::EE) ([]::EE_T) EvB1 : evalStmt FE_T ([]::EE_T) S2 EE_T' O2 H4 : is_stmt S2 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : is_list (is_list is_string) Names2 C : ctx_names EE3 Names2 SS'' : scopes_same EE3 EE_T' EvB2 : evalExpr FE_T EE_T' E3 V (B::BRest) O3 H8 : forall X V, lookup Scope X V -> lookup B X V H9 : forall X V, lookup B X V -> lookup Scope X V H10 : scopes_same EE' BRest ============================ exists EE_T', evalExpr FE_T EE_T (stmtExpr S2 E3) V EE_T' O
< search. Subgoal 5.1.25: Variables: T Names EE EE_T FE FE_T EE' O VF RF IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * ============================ exists EE_T', evalExpr FE_T EE_T T (recVal VF) EE_T' O
< case IsE. Subgoal 5.1.25: Variables: T Names EE EE_T FE FE_T EE' O VF RF IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) T Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF ============================ exists EE_T', evalExpr FE_T EE_T T (recVal VF) EE_T' O
< Trans: case Trans. Subgoal 5.1.25: Variables: Names EE EE_T FE FE_T EE' O VF RF RF2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 ============================ exists EE_T', evalExpr FE_T EE_T (recBuild RF2) (recVal VF) EE_T' O
< apply IH_RF to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.1.25: Variables: Names EE EE_T FE FE_T EE' O VF RF RF2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recBuild RF) (recVal VF) EE' O @ Ev1 : evalRecFields FE EE RF VF EE' O * H1 : is_recFieldExprs RF Trans : transRF Names RF RF2 H2 : evalRecFields FE_T EE_T RF2 VF EE_T' O ============================ exists EE_T', evalExpr FE_T EE_T (recBuild RF2) (recVal VF) EE_T' O
< search. Subgoal 5.1.26: Variables: T Names EE EE_T FE FE_T V EE' O Fields F Rec IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr (recFieldAccess Rec F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< case IsE. Subgoal 5.1.26: Variables: T Names EE EE_T FE FE_T V EE' O Fields F Rec IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess Rec F) T Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< Trans: case Trans. Subgoal 5.1.26: Variables: Names EE EE_T FE FE_T V EE' O Fields F Rec E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 ============================ exists EE_T', evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.1.26: Variables: Names EE EE_T FE FE_T V EE' O Fields F Rec E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE (recFieldAccess Rec F) V EE' O @ Ev1 : evalExpr FE EE Rec (recVal Fields) EE' O * Ev2 : lookup Fields F V H1 : is_expr Rec H2 : is_string F Trans : transE Names Rec E2 H3 : evalExpr FE_T EE_T E2 (recVal Fields) EE_T' O ============================ exists EE_T', evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O
< search. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< apply names_is to _ Ev1. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< apply proj_expr_is to Ev2 _ _. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown K evalExpr> T Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_expr E_P ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< Trans: case Trans. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N E_P1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_expr E_P Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P1 Trans2 : transE Names E_P1 T ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< apply proj_expr_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_expr E_P Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans2 Ev3. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_expr E_P Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H3 : evalExpr FE_T EE_T T V_P EE_T' O_P ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< Ev': apply proj_evalExpr_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T V EE' O Names1 E_P V_P EE_P O_P N EE_T' EE'' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V EE' O @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_expr E_P Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H3 : evalExpr FE_T EE_T T V_P EE_T' O_P Ev' : evalExpr FE EE E_P V EE'' O Ev'1 : scopes_same EE' EE'' ============================ exists EE_T', evalExpr FE_T EE_T T V EE_T' O
< apply evalExpr_unique to _ _ _ Ev' Ev3. Subgoal 5.1.27: Variables: T Names EE EE_T FE FE_T EE' Names1 E_P V_P EE_P O_P N EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsE : is_expr <unknown K evalExpr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalExpr FE EE <unknown K evalExpr> V_P EE' O_P @ Ev1 : names EE Names1 Ev2 : Names1 |{expr}- <unknown K evalExpr> ~~> E_P Ev3 : evalExpr FE EE E_P V_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_expr E_P Trans : join Names N Trans1 : N |{expr}- <unknown K evalExpr> ~~> E_P Trans2 : transE Names E_P T H3 : evalExpr FE_T EE_T T V_P EE_T' O_P Ev' : evalExpr FE EE E_P V_P EE_P O_P Ev'1 : scopes_same EE' EE_P ============================ exists EE_T', evalExpr FE_T EE_T T V_P EE_T' O_P
< search. Subgoal 5.2.1: Variables: T Names Names' Scope EE EE_T FE FE_T IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names noop T Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' []
< case Trans. Subgoal 5.2.1: Variables: Names' Scope EE EE_T FE FE_T IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) noop (Scope::EE) [] @ ============================ exists EE_T', evalStmt FE_T EE_T noop EE_T' []
< search. Subgoal 5.2.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.2: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) T Names' Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< EvB1: apply IH_S to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply transS_is to _ _ Trans. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply transS_isNames to _ _ Trans. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply evalStmt_isCtx to _ _ _ EvB1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< C: apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans Ev1. Subgoal 5.2.2: Variables: Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS Names S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 Names3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< case Ctxs. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 Names3 S21 S11 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 Names3 Trans1 : transS Names3 S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) Names3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< apply transS_old_scopes to _ _ Trans. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< SS': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 EE3 O2 * Ev2 : evalStmt FE EE3 S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) EE3 C : ctx_names EE3 (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest SS' : scopes_same EE3 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< case C (keep). Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' ARest A IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest) C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest SS' : scopes_same (A::ARest) EE_T' H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE SS' _ Trans1 Ev2. Subgoal 5.2.2: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 O3 S2 S1 S21 S11 EE_T' BRest B Scope' ARest A EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ev : evalStmt FE (Scope::EE) (seq S1 S2) EE' O @ Ev1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 * Ev2 : evalStmt FE (A::ARest) S2 EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_stmt S1 H2 : is_stmt S2 Trans : transS (B::BRest) S1 S11 (Scope'::BRest) Trans1 : transS (Scope'::BRest) S2 S21 Names' EvB1 : evalStmt FE_T EE_T S11 EE_T' O2 H3 : is_stmt S11 H4 : is_list (is_list is_string) (Scope'::BRest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : is_list (is_list (is_pair is_string is_value)) (A::ARest) C : ctx_names (A::ARest) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest SS' : scopes_same (A::ARest) EE_T' H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest EvB2 : evalStmt FE_T EE_T' S21 EE_T'1 O3 ============================ exists EE_T', evalStmt FE_T EE_T (seq S11 S21) EE_T' O
< search. Subgoal 5.2.3: Variables: T Names Names' Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.3: Variables: T Names Names' Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (declare Ty X E) T Names' Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 SS' : scopes_same (Scope1::EE2) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< case SS'. Subgoal 5.2.3: Variables: Scope EE EE_T FE FE_T O EE2 Scope1 V X E Ty Names1 Scope2 E2 BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope2::Names1) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope2::Names1) Ev : evalStmt FE (Scope::EE) (declare Ty X E) (((X, V)::Scope1)::EE2) O @ Ev1 : evalExpr FE (Scope::EE) E V (Scope1::EE2) O * H1 : is_typ Ty H2 : is_string X H3 : is_expr E Trans : transE (Scope2::Names1) E E2 EvB : evalExpr FE_T EE_T E2 V (B::BRest) O H4 : is_expr E2 H5 : forall X V, lookup Scope1 X V -> lookup B X V H6 : forall X V, lookup B X V -> lookup Scope1 X V H7 : scopes_same EE2 BRest ============================ exists EE_T', evalStmt FE_T EE_T (declare Ty X E2) EE_T' O
< search. Subgoal 5.2.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 E X IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.4: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 E X IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (assign X E) T Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H3 : is_expr E2 ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H3 : is_expr E2 SS' : scopes_same EE3 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H3 : is_expr E2 SS' : scopes_same EE3 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H3 : is_expr E2 SS' : scopes_same EE3 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< apply scopes_same_replaceScopes_exists to _ _ _ SS' Ev2. Subgoal 5.2.4: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 E X E2 EE_T' B' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (assign X E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : replaceScopes X V EE3 EE' H1 : is_string X H2 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H3 : is_expr E2 SS' : scopes_same EE3 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : replaceScopes X V EE_T' B' ============================ exists EE_T', evalStmt FE_T EE_T (assign X E2) EE_T' O
< search. Subgoal 5.2.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (recUpdate Rec Fields E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.5: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (recUpdate Rec Fields E) T Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< EvB: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 SS' : scopes_same EE3 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply scopes_same_replaceScopes_exists to _ _ _ SS' Ev4. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' B' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : replaceScopes Rec (recVal NewVals) EE_T' B' ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< apply scopes_same_lookupScopes_exists to _ _ SS Ev2. Subgoal 5.2.5: Variables: Names' Scope EE EE_T FE FE_T EE' O V EE3 FieldVals NewVals E Fields Rec E2 EE_T' B' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (recUpdate Rec Fields E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E V EE3 O * Ev2 : lookupScopes Rec (Scope::EE) (recVal FieldVals) Ev3 : updateRecFields Fields V FieldVals NewVals Ev4 : replaceScopes Rec (recVal NewVals) EE3 EE' H1 : is_string Rec H2 : is_list is_string Fields H3 : is_expr E Trans : transE Names' E E2 EvB : evalExpr FE_T EE_T E2 V EE_T' O H4 : is_expr E2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' H7 : replaceScopes Rec (recVal NewVals) EE_T' B' H8 : lookupScopes Rec EE_T (recVal FieldVals) ============================ exists EE_T', evalStmt FE_T EE_T (recUpdate Rec Fields E2) EE_T' O
< search. Subgoal 5.2.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.6: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply ctx_names_add_scope to C. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply scopes_same_add_scope to SS'. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Th2 EE_T'1 O3 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev2 EvB2. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Th2 EE_T'1 O3 SS+ : scopes_same (Scope1::EE') EE_T'1 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< case SS+. Subgoal 5.2.6: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) Th (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Th2 (B::BRest) O3 H9 : forall X V, lookup Scope1 X V -> lookup B X V H10 : forall X V, lookup B X V -> lookup Scope1 X V H11 : scopes_same EE' BRest ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< search. Subgoal 5.2.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.7: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (ifThenElse Cond Th El) T Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply ctx_names_add_scope to C. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< apply scopes_same_add_scope to SS'. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev2. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') El2 EE_T'1 O3 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvB2. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') El2 EE_T'1 O3 SS+ : scopes_same (Scope1::EE') EE_T'1 ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< case SS+. Subgoal 5.2.7: Variables: Names' Scope EE EE_T FE FE_T EE' O EE3 O2 Scope1 O3 El Th Cond NamesTh NamesEl El2 Th2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE3 O2 * Ev2 : evalStmt FE ([]::EE3) El (Scope1::EE') O3 * Ev3 : O2 ++ O3 = O H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Th Th2 NamesTh Trans2 : transS ([]::Names') El El2 NamesEl EvB1 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O2 H4 : is_expr Cond2 SS' : scopes_same EE3 EE_T' H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE3 Names' H7 : ctx_names ([]::EE3) ([]::Names') H8 : scopes_same ([]::EE3) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') El2 (B::BRest) O3 H9 : forall X V, lookup Scope1 X V -> lookup B X V H10 : forall X V, lookup B X V -> lookup Scope1 X V H11 : scopes_same EE' BRest ============================ exists EE_T', evalStmt FE_T EE_T (ifThenElse Cond2 Th2 El2) EE_T' O
< search. Subgoal 5.2.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.8: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans (keep). Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS _ Trans1 Ev1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply transE_is to _ _ Trans1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 Ev1 EvB1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< C: apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 Ev1. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply ctx_names_add_scope to C. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply scopes_same_add_scope to SS'. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< EvB2: apply IH_S to _ _ _ _ _ _ RFE _ _ Trans2 Ev2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 EE_T'1 O3 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 Ev2 EvB2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 EE_T'1 O3 SS+ : scopes_same (Scope1::EE4) EE_T'1 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< SS'': case SS+. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply transS_is to _ _ Trans2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4) ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case IsEE4+. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< IsBR+: apply evalStmt_isCtx to _ _ _ EvB2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 IsBR+ : is_list (is_list (is_pair is_string is_value)) (B::BRest) ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case IsBR+. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< C': apply evalStmt_trans_ctx_names to _ _ _ _ _ Trans2 Ev2. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Names2 Body2 Cond2 EE_T' BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 Names2 EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : ctx_names (Scope1::EE4) Names2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< C': case C'. Subgoal 5.2.8: Variables: Names' Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest1 B1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond2 Body2) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE Names' Cond Cond2 Trans2 : transS ([]::Names') Body Body2 (B1::BRest1) EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 Names' H6 : ctx_names ([]::EE2) ([]::Names') H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : forall K I, mem (K, I) Scope1 -> mem K B1 C'1 : forall K, mem K B1 -> exists I, mem (K, I) Scope1 C'2 : ctx_names EE4 BRest1 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case Ctxs. Subgoal 5.2.8: Variables: Scope EE EE_T FE FE_T EE' O EE2 O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest1 B1 BRest2 B2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal EE2 O2 * Ev2 : evalStmt FE ([]::EE2) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B2::BRest2) Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (B1::BRest1) EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same EE2 EE_T' H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE_T' C : ctx_names EE2 (B2::BRest2) H6 : ctx_names ([]::EE2) ([]::(B2::BRest2)) H7 : scopes_same ([]::EE2) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : forall K I, mem (K, I) Scope1 -> mem K B1 C'1 : forall K, mem K B1 -> exists I, mem (K, I) Scope1 C'2 : ctx_names EE4 BRest1 H13 : forall K I, mem (K, I) Scope -> mem K B2 H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope H15 : ctx_names EE BRest2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case C. Subgoal 5.2.8: Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest1 B1 BRest2 B2 ARest A IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B2::BRest2) Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (B1::BRest1) EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same (A::ARest) EE_T' H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2)) H7 : scopes_same ([]::(A::ARest)) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : forall K I, mem (K, I) Scope1 -> mem K B1 C'1 : forall K, mem K B1 -> exists I, mem (K, I) Scope1 C'2 : ctx_names EE4 BRest1 H13 : forall K I, mem (K, I) Scope -> mem K B2 H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope H15 : ctx_names EE BRest2 H16 : forall K I, mem (K, I) A -> mem K B2 H17 : forall K, mem K B2 -> exists I, mem (K, I) A H18 : ctx_names ARest BRest2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply transS_old_scopes to _ _ Trans2. Subgoal 5.2.8: Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 EE4 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest2 B2 ARest A Scope' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::EE4) O3 * Ev3 : evalStmt FE EE4 (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B2::BRest2) Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'::(B2::BRest2)) EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same (A::ARest) EE_T' H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2)) H7 : scopes_same ([]::(A::ARest)) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same EE4 BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) EE4 H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : forall K I, mem (K, I) Scope1 -> mem K Scope' C'1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 C'2 : ctx_names EE4 (B2::BRest2) H13 : forall K I, mem (K, I) Scope -> mem K B2 H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope H15 : ctx_names EE BRest2 H16 : forall K I, mem (K, I) A -> mem K B2 H17 : forall K, mem K B2 -> exists I, mem (K, I) A H18 : ctx_names ARest BRest2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< case C'2. Subgoal 5.2.8: Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest2 B2 ARest A Scope' ARest1 A1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B2::BRest2) Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'::(B2::BRest2)) EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same (A::ARest) EE_T' H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2)) H7 : scopes_same ([]::(A::ARest)) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same (A1::ARest1) BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : forall K I, mem (K, I) Scope1 -> mem K Scope' C'1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H13 : forall K I, mem (K, I) Scope -> mem K B2 H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope H15 : ctx_names EE BRest2 H16 : forall K I, mem (K, I) A -> mem K B2 H17 : forall K, mem K B2 -> exists I, mem (K, I) A H18 : ctx_names ARest BRest2 H19 : forall K I, mem (K, I) A1 -> mem K B2 H20 : forall K, mem K B2 -> exists I, mem (K, I) A1 H21 : ctx_names ARest1 BRest2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply IH_S to _ _ _ _ _ _ RFE SS''2 _ Trans Ev3. Subgoal 5.2.8: Variables: Scope EE EE_T FE FE_T EE' O O2 Scope1 O3 O4 O12 Body Cond Body2 Cond2 EE_T' BRest B BRest2 B2 ARest A Scope' ARest1 A1 EE_T'2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B2::BRest2) RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Trans : transS (B2::BRest2) (while Cond Body) (while Cond2 Body2) (B2::BRest2) Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond trueVal (A::ARest) O2 * Ev2 : evalStmt FE ([]::(A::ARest)) Body (Scope1::(A1::ARest1)) O3 * Ev3 : evalStmt FE (A1::ARest1) (while Cond Body) EE' O4 * Ev4 : O2 ++ O3 = O12 Ev5 : O12 ++ O4 = O H1 : is_expr Cond H2 : is_stmt Body Trans1 : transE (B2::BRest2) Cond Cond2 Trans2 : transS ([]::(B2::BRest2)) Body Body2 (Scope'::(B2::BRest2)) EvB1 : evalExpr FE_T EE_T Cond2 trueVal EE_T' O2 H3 : is_expr Cond2 SS' : scopes_same (A::ARest) EE_T' H4 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H5 : is_list (is_list (is_pair is_string is_value)) EE_T' H6 : ctx_names ([]::(A::ARest)) ([]::(B2::BRest2)) H7 : scopes_same ([]::(A::ARest)) ([]::EE_T') EvB2 : evalStmt FE_T ([]::EE_T') Body2 (B::BRest) O3 SS'' : forall X V, lookup Scope1 X V -> lookup B X V SS''1 : forall X V, lookup B X V -> lookup Scope1 X V SS''2 : scopes_same (A1::ARest1) BRest H8 : is_stmt Body2 H9 : is_list (is_pair is_string is_value) Scope1 H10 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) H11 : is_list (is_pair is_string is_value) B H12 : is_list (is_list (is_pair is_string is_value)) BRest C' : forall K I, mem (K, I) Scope1 -> mem K Scope' C'1 : forall K, mem K Scope' -> exists I, mem (K, I) Scope1 H13 : forall K I, mem (K, I) Scope -> mem K B2 H14 : forall K, mem K B2 -> exists I, mem (K, I) Scope H15 : ctx_names EE BRest2 H16 : forall K I, mem (K, I) A -> mem K B2 H17 : forall K, mem K B2 -> exists I, mem (K, I) A H18 : ctx_names ARest BRest2 H19 : forall K I, mem (K, I) A1 -> mem K B2 H20 : forall K, mem K B2 -> exists I, mem (K, I) A1 H21 : ctx_names ARest1 BRest2 H22 : evalStmt FE_T BRest (while Cond2 Body2) EE_T'2 O4 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< search. Subgoal 5.2.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Body Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.9: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Body Cond IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (while Cond Body) T Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T EE' O Body Cond Names2 Body2 Cond2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.9: Variables: Names' Scope EE EE_T FE FE_T EE' O Body Cond Names2 Body2 Cond2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (while Cond Body) EE' O @ Ev1 : evalExpr FE (Scope::EE) Cond falseVal EE' O * H1 : is_expr Cond H2 : is_stmt Body Trans : transE Names' Cond Cond2 Trans1 : transS ([]::Names') Body Body2 Names2 H3 : evalExpr FE_T EE_T Cond2 falseVal EE_T' O ============================ exists EE_T', evalStmt FE_T EE_T (while Cond2 Body2) EE_T' O
< search. Subgoal 5.2.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.10: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (scopeStmt S1) T Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< SS': apply scopes_same_add_scope to SS. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< Ctxs': apply ctx_names_add_scope to Ctxs. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< EvB: apply IH_S to _ _ _ _ _ _ RFE SS' Ctxs' Trans Ev1. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< SS+: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') EvB : evalStmt FE_T ([]::EE_T) S3 EE_T' O SS+ : scopes_same (Scope1::EE') EE_T' ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< case SS+. Subgoal 5.2.10: Variables: Names' Scope EE EE_T FE FE_T EE' O Scope1 S1 Names2 S3 BRest B IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (scopeStmt S1) EE' O @ Ev1 : evalStmt FE ([]::(Scope::EE)) S1 (Scope1::EE') O * H1 : is_stmt S1 Trans : transS ([]::Names') S1 S3 Names2 SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) Ctxs' : ctx_names ([]::(Scope::EE)) ([]::Names') EvB : evalStmt FE_T ([]::EE_T) S3 (B::BRest) O H2 : forall X V, lookup Scope1 X V -> lookup B X V H3 : forall X V, lookup B X V -> lookup Scope1 X V H4 : scopes_same EE' BRest ============================ exists EE_T', evalStmt FE_T EE_T (scopeStmt S3) EE_T' O
< search. Subgoal 5.2.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O I O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.11: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O I O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.11: Variables: Names' Scope EE EE_T FE FE_T EE' O I O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.11: Variables: Names' Scope EE EE_T FE FE_T EE' O I O2 E E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (intVal I) EE' O2 * Ev2 : O2 ++ [intVal I] = O H1 : is_expr E Trans : transE Names' E E2 H2 : evalExpr FE_T EE_T E2 (intVal I) EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.12: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.12: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.12: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E trueVal EE' O2 * Ev2 : O2 ++ [trueVal] = O H1 : is_expr E Trans : transE Names' E E2 H2 : evalExpr FE_T EE_T E2 trueVal EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.13: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.13: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.13: Variables: Names' Scope EE EE_T FE FE_T EE' O O2 E E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E falseVal EE' O2 * Ev2 : O2 ++ [falseVal] = O H1 : is_expr E Trans : transE Names' E E2 H2 : evalExpr FE_T EE_T E2 falseVal EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O S1 O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< case IsS. Subgoal 5.2.14: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O S1 O2 E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (printVal E) T Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.14: Variables: Names' Scope EE EE_T FE FE_T EE' O S1 O2 E E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< apply IH_E to _ _ _ _ _ _ RFE SS _ Trans Ev1. Subgoal 5.2.14: Variables: Names' Scope EE EE_T FE FE_T EE' O S1 O2 E E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Ev : evalStmt FE (Scope::EE) (printVal E) EE' O @ Ev1 : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 * Ev2 : O2 ++ [stringVal S1] = O H1 : is_expr E Trans : transE Names' E E2 H2 : evalExpr FE_T EE_T E2 (stringVal S1) EE_T' O2 ============================ exists EE_T', evalStmt FE_T EE_T (printVal E2) EE_T' O
< search. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply names_is to _ Ev1. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply proj_stmt_is to Ev2 _ _. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown K evalStmt> T Names' Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Trans: case Trans. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N S_P1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P1 Trans2 : transS Names S_P1 T Names' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply proj_stmt_unique_ctx_names to _ _ _ Ctxs Trans Ev1 Trans1 Ev2. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply IH_S to _ _ _ _ _ _ RFE SS _ Trans2 Ev3. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H3 : evalStmt FE_T EE_T T EE_T' O_P ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< Ev': apply proj_evalStmt_forward to Ev2 Ev1 _ _ _ Ev. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' O Names1 S_P EE_P O_P N EE_T' EE'' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H3 : evalStmt FE_T EE_T T EE_T' O_P Ev' : evalStmt FE (Scope::EE) S_P EE'' O Ev'1 : scopes_same EE' EE'' ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O
< apply evalStmt_unique to _ _ _ Ev' Ev3. Subgoal 5.2.15: Variables: T Names Names' Scope EE EE_T FE FE_T EE' Names1 S_P EE_P O_P N EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsS : is_stmt <unknown K evalStmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Ev : evalStmt FE (Scope::EE) <unknown K evalStmt> EE' O_P @ Ev1 : names (Scope::EE) Names1 Ev2 : Names1 |{stmt}- <unknown K evalStmt> ~~> S_P Ev3 : evalStmt FE (Scope::EE) S_P EE_P O_P * H1 : is_list is_string Names1 H2 : is_stmt S_P Trans : join Names N Trans1 : N |{stmt}- <unknown K evalStmt> ~~> S_P Trans2 : transS Names S_P T Names' H3 : evalStmt FE_T EE_T T EE_T' O_P Ev' : evalStmt FE (Scope::EE) S_P EE_P O_P Ev'1 : scopes_same EE' EE_P ============================ exists EE_T', evalStmt FE_T EE_T T EE_T' O_P
< search. Subgoal 5.3.1: Variables: T Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transA Names nilArgs T Ev : evalArgs FE EE' nilArgs [] EE' [] @ ============================ exists EE_T', evalArgs FE_T EE_T T [] EE_T' []
< case Trans. Subgoal 5.3.1: Variables: Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalArgs FE EE' nilArgs [] EE' [] @ ============================ exists EE_T', evalArgs FE_T EE_T nilArgs [] EE_T' []
< search. Subgoal 5.3.2: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsA : is_args (consArgs E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalArgs FE_T EE_T T (V1::VRest) EE_T' O
< case IsA. Subgoal 5.3.2: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E Rest) T Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest ============================ exists EE_T', evalArgs FE_T EE_T T (V1::VRest) EE_T' O
< Trans: case Trans. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< EvB2: apply IH_A to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.3.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 Rest E A2 E2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalArgs FE EE (consArgs E Rest) (V1::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalArgs FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_expr E H2 : is_args Rest Trans : transE Names E E2 Trans1 : transA Names Rest A2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H3 : scopes_same EE3 EE_T' H4 : ctx_names EE3 Names H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_expr E2 H7 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalArgs FE_T EE_T' A2 VRest EE_T'1 O3 ============================ exists EE_T', evalArgs FE_T EE_T (consArgs E2 A2) (V1::VRest) EE_T' O
< search. Subgoal 5.3.3: Variables: T Names EE EE_T FE FE_T V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ ============================ exists EE_T', evalArgs FE_T EE_T T V EE_T' O
< Or: apply is_args_nilArgs_or_consArgs to IsA. Subgoal 5.3.3: Variables: T Names EE EE_T FE FE_T V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsA : is_args <unknown K evalArgs> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names <unknown K evalArgs> T Ev : evalArgs FE EE <unknown K evalArgs> V EE' O @ Or : <unknown K evalArgs> = nilArgs \/ (exists E A', <unknown K evalArgs> = consArgs E A') ============================ exists EE_T', evalArgs FE_T EE_T T V EE_T' O
< case Or. Subgoal 5.4.1: Variables: T Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Trans : transRF Names nilRecFieldExprs T Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ ============================ exists EE_T', evalRecFields FE_T EE_T T [] EE_T' []
< case Trans. Subgoal 5.4.1: Variables: Names EE_T FE FE_T EE' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE' IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE' EE_T Ctxs : ctx_names EE' Names Ev : evalRecFields FE EE' nilRecFieldExprs [] EE' [] @ ============================ exists EE_T', evalRecFields FE_T EE_T nilRecFieldExprs [] EE_T' []
< search. Subgoal 5.4.2: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsRF : is_recFieldExprs (consRecFieldExprs F E Rest) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O ============================ exists EE_T', evalRecFields FE_T EE_T T ((F, V1)::VRest) EE_T' O
< case IsRF. Subgoal 5.4.2: Variables: T Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E Rest) T Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest ============================ exists EE_T', evalRecFields FE_T EE_T T ((F, V1)::VRest) EE_T' O
< Trans: case Trans. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< EvB1: apply IH_E to _ _ _ _ _ _ RFE SS Ctxs Trans Ev1. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans Ev1 EvB1. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H4 : scopes_same EE3 EE_T' ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans Ev1. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H4 : scopes_same EE3 EE_T' H5 : ctx_names EE3 Names ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< apply evalExpr_isCtx to _ _ _ Ev1. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H4 : scopes_same EE3 EE_T' H5 : ctx_names EE3 Names H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< apply transE_is to _ _ Trans. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H4 : scopes_same EE3 EE_T' H5 : ctx_names EE3 Names H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_expr E2 ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< apply evalExpr_isCtx to _ _ _ EvB1. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H4 : scopes_same EE3 EE_T' H5 : ctx_names EE3 Names H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_expr E2 H8 : is_list (is_list (is_pair is_string is_value)) EE_T' ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< EvB2: apply IH_RF to _ _ _ _ _ _ RFE _ _ Trans1 Ev2. Subgoal 5.4.2: Variables: Names EE EE_T FE FE_T EE' O EE3 O2 O3 VRest V1 F Rest E RF2 E2 EE_T' EE_T'1 IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Ev : evalRecFields FE EE (consRecFieldExprs F E Rest) ((F, V1)::VRest) EE' O @ Ev1 : evalExpr FE EE E V1 EE3 O2 * Ev2 : evalRecFields FE EE3 Rest VRest EE' O3 * Ev3 : O2 ++ O3 = O H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs Rest Trans : transE Names E E2 Trans1 : transRF Names Rest RF2 EvB1 : evalExpr FE_T EE_T E2 V1 EE_T' O2 H4 : scopes_same EE3 EE_T' H5 : ctx_names EE3 Names H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_expr E2 H8 : is_list (is_list (is_pair is_string is_value)) EE_T' EvB2 : evalRecFields FE_T EE_T' RF2 VRest EE_T'1 O3 ============================ exists EE_T', evalRecFields FE_T EE_T (consRecFieldExprs F E2 RF2) ((F, V1)::VRest) EE_T' O
< search. Subgoal 5.4.3: Variables: T Names EE EE_T FE FE_T V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ ============================ exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
< Or: apply is_recFieldExprs_nilRecFieldExprs_or_consRecFieldExprs to IsRF. Subgoal 5.4.3: Variables: T Names EE EE_T FE FE_T V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> evalExpr FE EE E V EE' O * -> exists EE_T', evalExpr FE_T EE_T T V EE_T' O IH_S : forall S T Names Names' Scope EE EE_T FE FE_T EE' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> evalStmt FE (Scope::EE) S EE' O * -> exists EE_T', evalStmt FE_T EE_T T EE_T' O IH_A : forall A T Names EE EE_T FE FE_T V EE' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> evalArgs FE EE A V EE' O * -> exists EE_T', evalArgs FE_T EE_T T V EE_T' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> evalRecFields FE EE RF V EE' O * -> exists EE_T', evalRecFields FE_T EE_T T V EE_T' O IsRF : is_recFieldExprs <unknown K evalRecFields> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names <unknown K evalRecFields> T Ev : evalRecFields FE EE <unknown K evalRecFields> V EE' O @ Or : <unknown K evalRecFields> = nilRecFieldExprs \/ (exists F E RF', <unknown K evalRecFields> = consRecFieldExprs F E RF') ============================ exists EE_T', evalRecFields FE_T EE_T T V EE_T' O
< case Or. Proof completed.
< Extensible_Theorem trans_getFunEvalInfo_forward : forall F F_T Name RetVar RVVal PNames Body, IsF : is_fun F -> Trans : transF F F_T -> GFEI : getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T on Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body1) Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 ============================ exists Body_T, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
< case IsF. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body1) (fun F1 RetTy RetVar1 InitVal Params Body2) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar1 H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body1 ============================ exists Body_T, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
< Trans: case Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params InitVal RetVar1 RetTy F1 Body1 PTys1 Names2 Names3 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body1 Body2 Names1 H1 : is_string F1 H2 : is_typ RetTy H3 : is_string RetVar1 H4 : is_value InitVal H5 : is_list is_param Params H6 : is_stmt Body1 Trans : paramTys Params PTys1 Trans4 : domain PTys1 Names2 Trans5 : transS [RetVar1::Names2] Body1 Body2 Names3 ============================ exists Body_T, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body2) Name RetVar RVVal PNames Body_T
< case GFEI. Subgoal 1: Variables: Name RetVar RVVal PNames Body PTys Names Names1 Body2 Params RetTy PTys1 Names2 Names3 IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body2 Names1 H1 : is_string Name H2 : is_typ RetTy H3 : is_string RetVar H4 : is_value RVVal H5 : is_list is_param Params H6 : is_stmt Body Trans : paramTys Params PTys1 Trans4 : domain PTys1 Names2 Trans5 : transS [RetVar::Names2] Body Body2 Names3 H7 : paramNames Params PNames ============================ exists Body_T, getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body2) Name RetVar RVVal PNames Body_T
< search. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< G: apply proj_getFunEvalInfo_forward to Trans1 _ GFEI. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G : getFunEvalInfo F_P Name RetVar RVVal PNames Body ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G : getFunEvalInfo F_P Name RetVar RVVal PNames Body H1 : is_fun F_P ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< apply IH to _ Trans2 G. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body F_P Body_T IH : forall F F_T Name RetVar RVVal PNames Body, is_fun F -> transF F F_T * -> getFunEvalInfo F Name RetVar RVVal PNames Body -> exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * G : getFunEvalInfo F_P Name RetVar RVVal PNames Body H1 : is_fun F_P H2 : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T ============================ exists Body_T, getFunEvalInfo F_T Name RetVar RVVal PNames Body_T
< search. Proof completed.
< Theorem trans_getFunEvalCtx_forward : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T. ============================ forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T
< induction on 2. IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T ============================ forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T
< intros IsFs Trans GFEI. Variables: Fs Fs_T FE IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun Fs Trans : transFuns Fs Fs_T @ GFEI : getFunEvalCtx Fs FE ============================ exists FE_T, getFunEvalCtx Fs_T FE_T
< Trans: case Trans. Subgoal 1: Variables: FE IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun [] GFEI : getFunEvalCtx [] FE ============================ exists FE_T, getFunEvalCtx [] FE_T
< case GFEI. Subgoal 1: IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun [] ============================ exists FE_T, getFunEvalCtx [] FE_T
< search. Subgoal 2: Variables: FE Rest1 F1 Rest F IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T IsFs : is_list is_fun (F::Rest) GFEI : getFunEvalCtx (F::Rest) FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< case IsFs. Subgoal 2: Variables: FE Rest1 F1 Rest F IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T GFEI : getFunEvalCtx (F::Rest) FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< G: case GFEI. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< apply IH to _ Trans1 G1. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE_T IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest H3 : getFunEvalCtx Rest1 FE_T ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< apply trans_getFunEvalInfo_forward to _ Trans G. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE_T Body_T IH : forall Fs Fs_T FE, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs FE -> exists FE_T, getFunEvalCtx Fs_T FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest CRest H3 : getFunEvalCtx Rest1 FE_T H4 : getFunEvalInfo F1 FName RetVar RVVal PNames Body_T ============================ exists FE_T, getFunEvalCtx (F1::Rest1) FE_T
< search. Proof completed.
< Extensible_Theorem trans_evalProgram_forward : forall P P_T A O, IsP : is_program P -> IsA : is_list is_value A -> Trans : transP P P_T -> Ev : evalProgram A P O -> evalProgram A P_T O on Trans. Subgoal 1: Variables: A O Main1 Funs1 Main Funs IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program (program Funs Main) IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Ev : evalProgram A (program Funs Main) O Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 ============================ evalProgram A (program Funs1 Main1) O
< case IsP. Subgoal 1: Variables: A O Main1 Funs1 Main Funs IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Ev : evalProgram A (program Funs Main) O Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main ============================ evalProgram A (program Funs1 Main1) O
< Ev: case Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O ============================ evalProgram A (program Funs1 Main1) O
< G: apply trans_getFunEvalCtx_forward to _ Trans1 Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T ============================ evalProgram A (program Funs1 Main1) O
< GM: apply trans_getFunEvalInfo_forward to _ Trans2 Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T ============================ evalProgram A (program Funs1 Main1) O
< RFE: apply trans_getFunEvalCtx_rel_FE to _ Trans1 Ev G. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T ============================ evalProgram A (program Funs1 Main1) O
< Tr: apply trans_getFunEvalInfo_rel to _ Trans2 Ev1 GM. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ evalProgram A (program Funs1 Main1) O
< RFE': assert rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T). Subgoal 1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T)
< unfold . Subgoal 1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ forall F RetVar1 RVVal PNames1 Body1, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) -> exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< intros L. Subgoal 1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< L: case L. Subgoal 1.1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body1 Ev2 : zip PNames1 A InitEnv Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body1))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body1 EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar1::PNames1] Body1 Body_T N ============================ exists Body_T1 Names, lookup ((F, (RetVar1, (RVVal, (PNames1, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< R: case RFE. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< apply R to L1. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body1 Body_T1 Names IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H3 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) H4 : transS [RetVar1::PNames1] Body1 Body_T1 Names ============================ exists Body_T1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N ============================ forall F RetVar1 RVVal PNames1 Body_T1, lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) -> exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< intros L. Subgoal 1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) F (RetVar1, (RVVal, (PNames1, Body_T1))) ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< L: case L. Subgoal 1.1.2.1: Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body Ev2 : zip PNames1 A InitEnv Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T1 RFE : rel_FE FCtx FE_T Tr : transS [RetVar1::PNames1] Body Body_T1 N ============================ exists Body1 Names, lookup ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< R: case RFE. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< apply R1 to L1. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N F RetVar1 RVVal PNames1 Body_T1 Body1 Names IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T Tr : transS [RetVar::PNames] Body Body_T N L : MainName = F -> false L1 : lookup FE_T F (RetVar1, (RVVal, (PNames1, Body_T1))) R : forall F RetVar RVVal PNames Body, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H3 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body1))) H4 : transS [RetVar1::PNames1] Body1 Body_T1 Names ============================ exists Body1 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body1))) /\ transS [RetVar1::PNames1] Body1 Body_T1 Names
< search. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) ============================ evalProgram A (program Funs1 Main1) O
< Is: apply getFunEvalInfo_is to _ Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body ============================ evalProgram A (program Funs1 Main1) O
< apply zip_is to _ _ Ev2. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv ============================ evalProgram A (program Funs1 Main1) O
< IsIE: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] ============================ evalProgram A (program Funs1 Main1) O
< SS: apply scopes_same_reflexive to IsIE. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] ============================ evalProgram A (program Funs1 Main1) O
< Z: assert zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv). Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) ============================ evalProgram A (program Funs1 Main1) O
< apply zip_ctx_names to Z. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] ============================ evalProgram A (program Funs1 Main1) O
< apply getFunEvalCtx_is to _ Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx ============================ evalProgram A (program Funs1 Main1) O
< apply transFuns_is to _ Trans1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 ============================ evalProgram A (program Funs1 Main1) O
< apply getFunEvalCtx_is to _ G. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T ============================ evalProgram A (program Funs1 Main1) O
< apply transF_is to _ Trans2. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T H8 : is_fun Main1 ============================ evalProgram A (program Funs1 Main1) O
< apply getFunEvalInfo_is to _ GM. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T H8 : is_fun Main1 H9 : is_string MainName H10 : is_string RetVar H11 : is_value RetVal H12 : is_list is_string PNames H13 : is_stmt Body_T ============================ evalProgram A (program Funs1 Main1) O
< apply trans_evalStmt_forward to _ _ _ _ _ _ RFE' SS _ Tr Ev3. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE_T Body_T N EE_T' IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs FCtx Ev1 : getFunEvalInfo Main MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O G : getFunEvalCtx Funs1 FE_T GM : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body_T RFE : rel_FE FCtx FE_T Tr : transS [RetVar::PNames] Body Body_T N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) Is : is_string MainName Is1 : is_string RetVar Is2 : is_value RetVal Is3 : is_list is_string PNames Is4 : is_stmt Body H3 : is_list (is_pair is_string is_value) InitEnv IsIE : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) H4 : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] H5 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx H6 : is_list is_fun Funs1 H7 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T H8 : is_fun Main1 H9 : is_string MainName H10 : is_string RetVar H11 : is_value RetVal H12 : is_list is_string PNames H13 : is_stmt Body_T H14 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body_T))))::FE_T) [(RetVar, RetVal)::InitEnv] Body_T EE_T' O ============================ evalProgram A (program Funs1 Main1) O
< search. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * ============================ evalProgram A P_T O
< Ev': apply proj_evalProgram_forward to Trans1 _ _ Ev. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * Ev' : evalProgram A P_P O ============================ evalProgram A P_T O
< apply proj_program_is to Trans1 _. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * Ev' : evalProgram A P_P O H1 : is_program P_P ============================ evalProgram A P_T O
< apply IH to _ _ Trans2 Ev'. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> transP P P_T * -> evalProgram A P O -> evalProgram A P_T O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A <unknown I program> O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * Ev' : evalProgram A P_P O H1 : is_program P_P H2 : evalProgram A P_T O ============================ evalProgram A P_T O
< search. Proof completed.
< Define emptyNames_FE : (list (pair (string) (pair (string) (pair value (pair (list (string)) stmt))))) -> prop by emptyNames_FE FE := forall F RetVar RVVal Params Body, mem (F, RetVar, RVVal, Params, Body) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames.
< Theorem ctx_names_mems [K, I] : forall (EE : list (list (pair K I))) NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA -> mems X NB. ============================ forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA -> mems X NB
< induction on 3. IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB ============================ forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA @ -> mems X NB
< intros CNA CNB M. Variables: EE NA NB X IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB CNA : ctx_names EE NA CNB : ctx_names EE NB M : mems X NA @ ============================ mems X NB
< M: case M. Subgoal 1: Variables: EE NB X Rest S IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB CNA : ctx_names EE (S::Rest) CNB : ctx_names EE NB M : mem X S ============================ mems X NB
< RA: case CNA. Subgoal 1: Variables: NB X Rest S ARest A IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB CNB : ctx_names (A::ARest) NB M : mem X S RA : forall K I, mem (K, I) A -> mem K S RA1 : forall K, mem K S -> exists I, mem (K, I) A RA2 : ctx_names ARest Rest ============================ mems X NB
< RB: case CNB. Subgoal 1: Variables: X Rest S ARest A BRest B IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB M : mem X S RA : forall K I, mem (K, I) A -> mem K S RA1 : forall K, mem K S -> exists I, mem (K, I) A RA2 : ctx_names ARest Rest RB : forall K I, mem (K, I) A -> mem K B RB1 : forall K, mem K B -> exists I, mem (K, I) A RB2 : ctx_names ARest BRest ============================ mems X (B::BRest)
< MA: apply RA1 to M. Subgoal 1: Variables: X Rest S ARest A BRest B I IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB M : mem X S RA : forall K I, mem (K, I) A -> mem K S RA1 : forall K, mem K S -> exists I, mem (K, I) A RA2 : ctx_names ARest Rest RB : forall K I, mem (K, I) A -> mem K B RB1 : forall K, mem K B -> exists I, mem (K, I) A RB2 : ctx_names ARest BRest MA : mem (X, I) A ============================ mems X (B::BRest)
< apply RB to MA. Subgoal 1: Variables: X Rest S ARest A BRest B I IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB M : mem X S RA : forall K I, mem (K, I) A -> mem K S RA1 : forall K, mem K S -> exists I, mem (K, I) A RA2 : ctx_names ARest Rest RB : forall K I, mem (K, I) A -> mem K B RB1 : forall K, mem K B -> exists I, mem (K, I) A RB2 : ctx_names ARest BRest MA : mem (X, I) A H1 : mem X B ============================ mems X (B::BRest)
< search. Subgoal 2: Variables: EE NB X Rest S IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB CNA : ctx_names EE (S::Rest) CNB : ctx_names EE NB M : mems X Rest * ============================ mems X NB
< CNA: case CNA. Subgoal 2: Variables: NB X Rest S ARest A IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB CNB : ctx_names (A::ARest) NB M : mems X Rest * CNA : forall K I, mem (K, I) A -> mem K S CNA1 : forall K, mem K S -> exists I, mem (K, I) A CNA2 : ctx_names ARest Rest ============================ mems X NB
< CNB: case CNB. Subgoal 2: Variables: X Rest S ARest A BRest B IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB M : mems X Rest * CNA : forall K I, mem (K, I) A -> mem K S CNA1 : forall K, mem K S -> exists I, mem (K, I) A CNA2 : ctx_names ARest Rest CNB : forall K I, mem (K, I) A -> mem K B CNB1 : forall K, mem K B -> exists I, mem (K, I) A CNB2 : ctx_names ARest BRest ============================ mems X (B::BRest)
< apply IH to CNA2 CNB2 M. Subgoal 2: Variables: X Rest S ARest A BRest B IH : forall EE NA NB X, ctx_names EE NA -> ctx_names EE NB -> mems X NA * -> mems X NB M : mems X Rest * CNA : forall K I, mem (K, I) A -> mem K S CNA1 : forall K, mem K S -> exists I, mem (K, I) A CNA2 : ctx_names ARest Rest CNB : forall K I, mem (K, I) A -> mem K B CNB1 : forall K, mem K B -> exists I, mem (K, I) A CNB2 : ctx_names ARest BRest H1 : mems X BRest ============================ mems X (B::BRest)
< search. Proof completed.
< Extensible_Theorem trans_evalExpr_backward : forall E T Names EE EE_T FE FE_T V EE_T' O, IsE : is_expr E -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> ENFE : emptyNames_FE FE -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transE Names E T -> EN : exprNames Names E [] -> Ev : evalExpr FE_T EE_T T V EE_T' O -> exists EE', evalExpr FE EE E V EE' O on Ev as IH_E_E, Trans * as IH_E, trans_evalStmt_backward : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, IsS : is_stmt S -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> ENFE : emptyNames_FE FE -> SS : scopes_same (Scope::EE) EE_T -> Ctxs : ctx_names (Scope::EE) Names -> Trans : transS Names S T Names' -> SN : stmtNames Names S [] Names'' -> Ev : evalStmt FE_T EE_T T EE_T' O -> exists EE', evalStmt FE (Scope::EE) S EE' O on Ev as IH_S_E, Trans * as IH_Salso trans_evalArgs_backward : forall A T Names EE EE_T FE FE_T V EE_T' O, IsA : is_args A -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> ENFE : emptyNames_FE FE -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transA Names A T -> AN : argsNames Names A [] -> Ev : evalArgs FE_T EE_T T V EE_T' O -> exists EE', evalArgs FE EE A V EE' O on Ev as IH_A_E, Trans * as IH_A, trans_evalRecFields_backward : forall RF T Names EE EE_T FE FE_T V EE_T' O, IsRF : is_recFieldExprs RF -> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> IsEE : is_list (is_list (is_pair is_string is_value)) EE -> IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T -> IsNames : is_list (is_list is_string) Names -> RFE : rel_FE FE FE_T -> ENFE : emptyNames_FE FE -> SS : scopes_same EE EE_T -> Ctxs : ctx_names EE Names -> Trans : transRF Names RF T -> RFN : recFieldNames Names RF [] -> Ev : evalRecFields FE_T EE_T T V EE_T' O -> exists EE', evalRecFields FE EE RF V EE' O on Ev as IH_RF_E, Trans * as IH_RF. Subgoal 1.1: Variables: Names EE EE_T FE FE_T V EE_T' O I IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (num I) (num I) @@ EN : exprNames Names (num I) [] Ev : evalExpr FE_T EE_T (num I) V EE_T' O @ ============================ exists EE', evalExpr FE EE (num I) V EE' O
< case Ev. Subgoal 1.1: Variables: Names EE FE FE_T EE_T' I IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (num I) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transE Names (num I) (num I) @@ EN : exprNames Names (num I) [] ============================ exists EE', evalExpr FE EE (num I) (intVal I) EE' []
< search. Subgoal 1.2: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (plus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ EN : exprNames Names (plus E1 E2) [] Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (plus E1 E2) V EE' O
< case IsE. Subgoal 1.2: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ EN : exprNames Names (plus E1 E2) [] Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (plus E1 E2) V EE' O
< EN: case EN. Subgoal 1.2: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (plus E1 E2) V EE' O
< case EN2. Subgoal 1.2: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Ev : evalExpr FE_T EE_T (plus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (plus E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (plus E1 E2) (plus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 + I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3 ============================ exists EE', evalExpr FE EE (plus E1 E2) (intVal I) EE' O
< search. Subgoal 1.3: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (minus E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ EN : exprNames Names (minus E1 E2) [] Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (minus E1 E2) V EE' O
< case IsE. Subgoal 1.3: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ EN : exprNames Names (minus E1 E2) [] Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (minus E1 E2) V EE' O
< EN: case EN. Subgoal 1.3: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (minus E1 E2) V EE' O
< case EN2. Subgoal 1.3: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Ev : evalExpr FE_T EE_T (minus E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (minus E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (minus E1 E2) (minus E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 - I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3 ============================ exists EE', evalExpr FE EE (minus E1 E2) (intVal I) EE' O
< search. Subgoal 1.4: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (mult E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ EN : exprNames Names (mult E1 E2) [] Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (mult E1 E2) V EE' O
< case IsE. Subgoal 1.4: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ EN : exprNames Names (mult E1 E2) [] Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (mult E1 E2) V EE' O
< EN: case EN. Subgoal 1.4: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (mult E1 E2) V EE' O
< case EN2. Subgoal 1.4: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Ev : evalExpr FE_T EE_T (mult E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (mult E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.4: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (mult E1 E2) (mult E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 * I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3 ============================ exists EE', evalExpr FE EE (mult E1 E2) (intVal I) EE' O
< search. Subgoal 1.5: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (div E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ EN : exprNames Names (div E1 E2) [] Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (div E1 E2) V EE' O
< case IsE. Subgoal 1.5: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ EN : exprNames Names (div E1 E2) [] Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (div E1 E2) V EE' O
< EN: case EN. Subgoal 1.5: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (div E1 E2) V EE' O
< case EN2. Subgoal 1.5: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Ev : evalExpr FE_T EE_T (div E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (div E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.5: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 I EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (div E1 E2) (div E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 / I2 = I Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3 ============================ exists EE', evalExpr FE EE (div E1 E2) (intVal I) EE' O
< search. Subgoal 1.6: Variables: Names EE EE_T FE FE_T V EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names true true @@ EN : exprNames Names true [] Ev : evalExpr FE_T EE_T true V EE_T' O @ ============================ exists EE', evalExpr FE EE true V EE' O
< case Ev. Subgoal 1.6: Variables: Names EE FE FE_T EE_T' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr true IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transE Names true true @@ EN : exprNames Names true [] ============================ exists EE', evalExpr FE EE true trueVal EE' []
< search. Subgoal 1.7: Variables: Names EE EE_T FE FE_T V EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names false false @@ EN : exprNames Names false [] Ev : evalExpr FE_T EE_T false V EE_T' O @ ============================ exists EE', evalExpr FE EE false V EE' O
< case Ev. Subgoal 1.7: Variables: Names EE FE FE_T EE_T' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr false IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transE Names false false @@ EN : exprNames Names false [] ============================ exists EE', evalExpr FE EE false falseVal EE' []
< search. Subgoal 1.8: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (and E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ EN : exprNames Names (and E1 E2) [] Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (and E1 E2) V EE' O
< case IsE. Subgoal 1.8: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ EN : exprNames Names (and E1 E2) [] Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (and E1 E2) V EE' O
< EN: case EN. Subgoal 1.8: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (and E1 E2) V EE' O
< case EN2. Subgoal 1.8: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Ev : evalExpr FE_T EE_T (and E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (and E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.8.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 trueVal EE'1 O3 ============================ exists EE', evalExpr FE EE (and E1 E2) trueVal EE' O
< search. Subgoal 1.8.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE_T' O * ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.8.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE_T' O * H3 : evalExpr FE EE E1 falseVal EE' O ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< search. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.8.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (and E1 E2) (and E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 trueVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 falseVal EE'1 O3 ============================ exists EE', evalExpr FE EE (and E1 E2) falseVal EE' O
< search. Subgoal 1.9: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (or E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ EN : exprNames Names (or E1 E2) [] Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (or E1 E2) V EE' O
< case IsE. Subgoal 1.9: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ EN : exprNames Names (or E1 E2) [] Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (or E1 E2) V EE' O
< EN: case EN. Subgoal 1.9: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (or E1 E2) V EE' O
< case EN2. Subgoal 1.9: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Ev : evalExpr FE_T EE_T (or E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (or E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.9.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE_T' O * ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.9.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 trueVal EE_T' O * H3 : evalExpr FE EE E1 trueVal EE' O ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< search. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.9.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 trueVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 trueVal EE'1 O3 ============================ exists EE', evalExpr FE EE (or E1 E2) trueVal EE' O
< search. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.9.3: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 EE3 O2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (or E1 E2) (or E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 falseVal EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 falseVal EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 falseVal EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 falseVal EE'1 O3 ============================ exists EE', evalExpr FE EE (or E1 E2) falseVal EE' O
< search. Subgoal 1.10: Variables: Names EE EE_T FE FE_T V EE_T' O E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (not E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ EN : exprNames Names (not E1) [] Ev : evalExpr FE_T EE_T (not E2) V EE_T' O @ Trans1 : transE Names E1 E2 ** ============================ exists EE', evalExpr FE EE (not E1) V EE' O
< case IsE. Subgoal 1.10: Variables: Names EE EE_T FE FE_T V EE_T' O E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ EN : exprNames Names (not E1) [] Ev : evalExpr FE_T EE_T (not E2) V EE_T' O @ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 ============================ exists EE', evalExpr FE EE (not E1) V EE' O
< EN: case EN. Subgoal 1.10: Variables: Names EE EE_T FE FE_T V EE_T' O E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ Ev : evalExpr FE_T EE_T (not E2) V EE_T' O @ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 EN : exprNames Names E1 [] ============================ exists EE', evalExpr FE EE (not E1) V EE' O
< Ev: case Ev. Subgoal 1.10.1: Variables: Names EE EE_T FE FE_T EE_T' O E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 EN : exprNames Names E1 [] Ev : evalExpr FE_T EE_T E2 falseVal EE_T' O * ============================ exists EE', evalExpr FE EE (not E1) trueVal EE' O
< apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.10.1: Variables: Names EE EE_T FE FE_T EE_T' O E2 E1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 EN : exprNames Names E1 [] Ev : evalExpr FE_T EE_T E2 falseVal EE_T' O * H2 : evalExpr FE EE E1 falseVal EE' O ============================ exists EE', evalExpr FE EE (not E1) trueVal EE' O
< search. Subgoal 1.10.2: Variables: Names EE EE_T FE FE_T EE_T' O E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 EN : exprNames Names E1 [] Ev : evalExpr FE_T EE_T E2 trueVal EE_T' O * ============================ exists EE', evalExpr FE EE (not E1) falseVal EE' O
< apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.10.2: Variables: Names EE EE_T FE FE_T EE_T' O E2 E1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (not E1) (not E2) @@ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 EN : exprNames Names E1 [] Ev : evalExpr FE_T EE_T E2 trueVal EE_T' O * H2 : evalExpr FE EE E1 trueVal EE' O ============================ exists EE', evalExpr FE EE (not E1) falseVal EE' O
< search. Subgoal 1.11: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (greater E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ EN : exprNames Names (greater E1 E2) [] Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (greater E1 E2) V EE' O
< case IsE. Subgoal 1.11: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ EN : exprNames Names (greater E1 E2) [] Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (greater E1 E2) V EE' O
< EN: case EN. Subgoal 1.11: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (greater E1 E2) V EE' O
< case EN2. Subgoal 1.11: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Ev : evalExpr FE_T EE_T (greater E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (greater E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.11.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 > I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3 ============================ exists EE', evalExpr FE EE (greater E1 E2) trueVal EE' O
< search. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.11.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 I1 EE3 O2 I2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (greater E1 E2) (greater E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (intVal I1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (intVal I2) EE_T' O3 * Ev2 : I1 <= I2 Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (intVal I1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (intVal I2) EE'1 O3 ============================ exists EE', evalExpr FE EE (greater E1 E2) falseVal EE' O
< search. Subgoal 1.12: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (eq E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ EN : exprNames Names (eq E1 E2) [] Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (eq E1 E2) V EE' O
< case IsE. Subgoal 1.12: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ EN : exprNames Names (eq E1 E2) [] Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (eq E1 E2) V EE' O
< EN: case EN. Subgoal 1.12: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (eq E1 E2) V EE' O
< case EN2. Subgoal 1.12: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Ev : evalExpr FE_T EE_T (eq E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (eq E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.12.1: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V1 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 V1 EE'1 O3 ============================ exists EE', evalExpr FE EE (eq E1 E2) trueVal EE' O
< search. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.12.2: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 V1 EE3 O2 V2 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (eq E1 E2) (eq E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 V1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 V2 EE_T' O3 * Ev2 : V1 = V2 -> false Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 V1 EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 V2 EE'1 O3 ============================ exists EE', evalExpr FE EE (eq E1 E2) falseVal EE' O
< search. Subgoal 1.13: Variables: Names EE EE_T FE FE_T V EE_T' O S IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stringLit S) (stringLit S) @@ EN : exprNames Names (stringLit S) [] Ev : evalExpr FE_T EE_T (stringLit S) V EE_T' O @ ============================ exists EE', evalExpr FE EE (stringLit S) V EE' O
< case Ev. Subgoal 1.13: Variables: Names EE FE FE_T EE_T' S IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (stringLit S) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transE Names (stringLit S) (stringLit S) @@ EN : exprNames Names (stringLit S) [] ============================ exists EE', evalExpr FE EE (stringLit S) (stringVal S) EE' []
< search. Subgoal 1.14: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (appString E1 E2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ EN : exprNames Names (appString E1 E2) [] Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** ============================ exists EE', evalExpr FE EE (appString E1 E2) V EE' O
< case IsE. Subgoal 1.14: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ EN : exprNames Names (appString E1 E2) [] Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 ============================ exists EE', evalExpr FE EE (appString E1 E2) V EE' O
< EN: case EN. Subgoal 1.14: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 N1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 N1 EN1 : exprNames Names E2 N2 EN2 : N1 ++ N2 = [] ============================ exists EE', evalExpr FE EE (appString E1 E2) V EE' O
< case EN2. Subgoal 1.14: Variables: Names EE EE_T FE FE_T V EE_T' O E21 E11 E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Ev : evalExpr FE_T EE_T (appString E11 E21) V EE_T' O @ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] ============================ exists EE', evalExpr FE EE (appString E1 E2) V EE' O
< Ev: case Ev. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 EN Ev. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 SS' : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< apply transE_is to _ _ Trans1. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 1.14: Variables: Names EE EE_T FE FE_T EE_T' O E21 E11 E2 E1 S1 EE3 O2 S2 O3 S EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (appString E1 E2) (appString E11 E21) @@ Trans1 : transE Names E1 E11 ** Trans2 : transE Names E2 E21 ** H1 : is_expr E1 H2 : is_expr E2 EN : exprNames Names E1 [] EN1 : exprNames Names E2 [] Ev : evalExpr FE_T EE_T E11 (stringVal S1) EE3 O2 * Ev1 : evalExpr FE_T EE3 E21 (stringVal S2) EE_T' O3 * Ev2 : S1 ++ S2 = S Ev3 : O2 ++ O3 = O EvA1 : evalExpr FE EE E1 (stringVal S1) EE' O2 SS' : scopes_same EE' EE3 H3 : ctx_names EE' Names H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E11 H6 : is_list (is_list (is_pair is_string is_value)) EE3 EvA2 : evalExpr FE EE' E2 (stringVal S2) EE'1 O3 ============================ exists EE', evalExpr FE EE (appString E1 E2) (stringVal S) EE' O
< search. Subgoal 1.15: Variables: Names EE EE_T FE FE_T V EE_T' O X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (name X) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (name X) (name X) @@ EN : exprNames Names (name X) [] Ev : evalExpr FE_T EE_T (name X) V EE_T' O @ ============================ exists EE', evalExpr FE EE (name X) V EE' O
< case IsE. Subgoal 1.15: Variables: Names EE EE_T FE FE_T V EE_T' O X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (name X) (name X) @@ EN : exprNames Names (name X) [] Ev : evalExpr FE_T EE_T (name X) V EE_T' O @ H1 : is_string X ============================ exists EE', evalExpr FE EE (name X) V EE' O
< SS': apply scopes_same_symm to SS. Subgoal 1.15: Variables: Names EE EE_T FE FE_T V EE_T' O X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (name X) (name X) @@ EN : exprNames Names (name X) [] Ev : evalExpr FE_T EE_T (name X) V EE_T' O @ H1 : is_string X SS' : scopes_same EE_T EE ============================ exists EE', evalExpr FE EE (name X) V EE' O
< Ev: case Ev. Subgoal 1.15: Variables: Names EE FE FE_T V EE_T' X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transE Names (name X) (name X) @@ EN : exprNames Names (name X) [] H1 : is_string X SS' : scopes_same EE_T' EE Ev : lookupScopes X EE_T' V ============================ exists EE', evalExpr FE EE (name X) V EE' []
< apply scopes_same_lookupScopes_exists to _ _ SS' Ev. Subgoal 1.15: Variables: Names EE FE FE_T V EE_T' X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transE Names (name X) (name X) @@ EN : exprNames Names (name X) [] H1 : is_string X SS' : scopes_same EE_T' EE Ev : lookupScopes X EE_T' V H2 : lookupScopes X EE V ============================ exists EE', evalExpr FE EE (name X) V EE' []
< search. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (call F A) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ EN : exprNames Names (call F A) [] Ev : evalExpr FE_T EE_T (call F A1) V EE_T' O @ Trans1 : transA Names A A1 ** ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< case IsE. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ EN : exprNames Names (call F A) [] Ev : evalExpr FE_T EE_T (call F A1) V EE_T' O @ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< EN: case EN. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Ev : evalExpr FE_T EE_T (call F A1) V EE_T' O @ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< Ev: case Ev. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< R: case RFE (keep). Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< LF: apply R1 to Ev. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FE_T F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< clear R R1. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< EvA1: apply IH_A to _ _ _ _ _ _ RFE _ SS _ Trans1 _ Ev1. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< Z: assert zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv). Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< apply zip_ctx_names to Z. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< apply evalArgs_isValue to _ _ _ EvA1. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< IsP: apply lookup_is_value_funCtx to _ LF. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)) (RetVar, (RVVal, (ArgNames, Body1))) ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< IsP: case IsP. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_pair is_value (is_pair (is_list is_string) is_stmt) (RVVal, (ArgNames, Body1)) ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< IsP: case IsP1. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_pair (is_list is_string) is_stmt (ArgNames, Body1) ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< IsP: case IsP2. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< IsInitEnv: apply zip_is to _ _ Z. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< SS1: apply scopes_same_reflexive to _ with L = [(RetVar, RVVal)::InitEnv]. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< ENFE: case ENFE. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< MF: apply lookup_mem to LF. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< SN: apply ENFE to MF. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< EvA2: apply IH_S_E to _ _ _ _ _ _ RFE _ SS1 _ LF1 _ Ev3. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< SS2: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ LF1 EvA2 Ev3. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 SS2 : scopes_same EE'1 EE3 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< SS2': apply scopes_same_symm to SS2. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 SS2 : scopes_same EE'1 EE3 SS2' : scopes_same EE3 EE'1 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< apply transS_is to _ _ LF1. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 SS2 : scopes_same EE'1 EE3 SS2' : scopes_same EE3 EE'1 H5 : is_stmt Body ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< apply evalStmt_isCtx to _ _ _ Ev3. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 SS2 : scopes_same EE'1 EE3 SS2' : scopes_same EE3 EE'1 H5 : is_stmt Body H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< apply evalStmt_isCtx to _ _ _ EvA2. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 SS2 : scopes_same EE'1 EE3 SS2' : scopes_same EE3 EE'1 H5 : is_stmt Body H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE'1 ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< apply scopes_same_lookupScopes_exists to _ _ SS2' Ev5. Subgoal 1.16: Variables: Names EE EE_T FE FE_T V EE_T' O A1 F A RetVar RVVal ArgNames Body ArgVals O2 InitEnv EE3 O3 Body1 Names1 EE' EndNames EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (call F A) (call F A1) @@ Trans1 : transA Names A A1 ** H1 : is_string F H2 : is_args A EN : argsNames Names A [] Ev : lookup FE_T F (RetVar, (RVVal, (ArgNames, Body))) Ev1 : evalArgs FE_T EE_T A1 ArgVals EE_T' O2 * Ev2 : zip ArgNames ArgVals InitEnv Ev3 : evalStmt FE_T [(RetVar, RVVal)::InitEnv] Body EE3 O3 * Ev4 : O2 ++ O3 = O Ev5 : lookupScopes RetVar EE3 V LF : lookup FE F (RetVar, (RVVal, (ArgNames, Body1))) LF1 : transS [RetVar::ArgNames] Body1 Body Names1 EvA1 : evalArgs FE EE A ArgVals EE' O2 Z : zip (RetVar::ArgNames) (RVVal::ArgVals) ((RetVar, RVVal)::InitEnv) H3 : ctx_names [(RetVar, RVVal)::InitEnv] [RetVar::ArgNames] H4 : is_list is_value ArgVals IsP : is_string RetVar IsP1 : is_value RVVal IsP2 : is_list is_string ArgNames IsP3 : is_stmt Body1 IsInitEnv : is_list (is_pair is_string is_value) ((RetVar, RVVal)::InitEnv) SS1 : scopes_same [(RetVar, RVVal)::InitEnv] [(RetVar, RVVal)::InitEnv] ENFE : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames MF : mem (F, (RetVar, (RVVal, (ArgNames, Body1)))) FE SN : stmtNames [RetVar::ArgNames] Body1 [] EndNames EvA2 : evalStmt FE [(RetVar, RVVal)::InitEnv] Body1 EE'1 O3 SS2 : scopes_same EE'1 EE3 SS2' : scopes_same EE3 EE'1 H5 : is_stmt Body H6 : is_list (is_list (is_pair is_string is_value)) EE3 H7 : is_list (is_list (is_pair is_string is_value)) EE'1 H8 : lookupScopes RetVar EE'1 V ============================ exists EE', evalExpr FE EE (call F A) V EE' O
< search. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (stmtExpr S E1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ EN : exprNames Names (stmtExpr S E1) [] Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< case IsE. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ EN : exprNames Names (stmtExpr S E1) [] Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< EN: case EN. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S NS CtxS NE IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S NS CtxS EN1 : exprNames CtxS E1 NE EN2 : NS ++ NE = [] ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< case EN2. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Ev : evalExpr FE_T EE_T (stmtExpr S1 E2) V EE_T' O @ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< Ev: case Ev. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< SS': apply scopes_same_add_scope to SS. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< C': apply ctx_names_add_scope to Ctxs. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< EvA1: apply IH_S to _ _ _ _ _ _ RFE _ SS' C' Trans1 _ Ev. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< SS2: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< C2: apply evalStmt_trans_ctx_names to _ _ _ _ C' Trans1 EvA1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< apply evalStmt_isCtx to _ _ _ EvA1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< apply transS_is to _ _ Trans1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< apply transS_isNames to _ _ Trans1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< apply evalStmt_isCtx to _ _ _ Ev. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< C2': apply evalStmt_ctx_names to _ _ _ _ _ EN EvA1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< apply stmtNames_isCtx to _ _ EN. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< assert exprNames Names2 E1 []. Subgoal 1.17.1: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS ============================ exprNames Names2 E1 []
< apply exprNames_relatedCtxs to _ _ _ _ _ EN1 with CtxB = Names2. Subgoal 1.17.1.1: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS ============================ forall X, mems X Names2 -> mems X CtxS
< intros M. Subgoal 1.17.1.1: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS M : mems X Names2 ============================ mems X CtxS
< apply ctx_names_mems to C2 C2' M. Subgoal 1.17.1.1: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS M : mems X Names2 H8 : mems X CtxS ============================ mems X CtxS
< search. Subgoal 1.17.1.2: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS ============================ forall X, mems X CtxS -> mems X Names2
< intros M. Subgoal 1.17.1.2: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS M : mems X CtxS ============================ mems X Names2
< apply ctx_names_mems to C2' C2 M. Subgoal 1.17.1.2: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS M : mems X CtxS H8 : mems X Names2 ============================ mems X Names2
< search. Subgoal 1.17.1: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames Names2 E1 [] ============================ exprNames Names2 E1 []
< search. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames Names2 E1 [] ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< EvA2: apply IH_E to _ _ _ _ _ _ RFE _ SS2 C2 Trans2 _ Ev1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O Names2 E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 Names2 ** Trans2 : transE Names2 E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' Names2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) Names2 H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames Names2 E1 [] EvA2 : evalExpr FE EE' E1 V EE'1 O3 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< apply transS_old_scopes to _ _ Trans1. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 EE' EE'1 Scope' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 (Scope'::Names) ** Trans2 : transE (Scope'::Names) E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S EE' O2 SS2 : scopes_same EE' EE3 C2 : ctx_names EE' (Scope'::Names) H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S1 H5 : is_list (is_list is_string) (Scope'::Names) H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names EE' CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames (Scope'::Names) E1 [] EvA2 : evalExpr FE EE' E1 V EE'1 O3 ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< case C2 (keep). Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'1 Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 (Scope'::Names) ** Trans2 : transE (Scope'::Names) E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S (A::ARest) O2 SS2 : scopes_same (A::ARest) EE3 C2 : ctx_names (A::ARest) (Scope'::Names) H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S1 H5 : is_list (is_list is_string) (Scope'::Names) H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names (A::ARest) CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames (Scope'::Names) E1 [] EvA2 : evalExpr FE (A::ARest) E1 V EE'1 O3 H9 : forall K I, mem (K, I) A -> mem K Scope' H10 : forall K, mem K Scope' -> exists I, mem (K, I) A H11 : ctx_names ARest Names ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< C3: apply evalExpr_trans_ctx_names to _ _ _ _ C2 Trans2 EvA2. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 EE'1 Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 (Scope'::Names) ** Trans2 : transE (Scope'::Names) E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S (A::ARest) O2 SS2 : scopes_same (A::ARest) EE3 C2 : ctx_names (A::ARest) (Scope'::Names) H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S1 H5 : is_list (is_list is_string) (Scope'::Names) H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names (A::ARest) CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames (Scope'::Names) E1 [] EvA2 : evalExpr FE (A::ARest) E1 V EE'1 O3 H9 : forall K I, mem (K, I) A -> mem K Scope' H10 : forall K, mem K Scope' -> exists I, mem (K, I) A H11 : ctx_names ARest Names C3 : ctx_names EE'1 (Scope'::Names) ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< case C3. Subgoal 1.17: Variables: Names EE EE_T FE FE_T V EE_T' O E2 S1 E1 S CtxS EE3 O2 Scope O3 Scope' ARest A ARest1 A1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (stmtExpr S E1) (stmtExpr S1 E2) @@ Trans1 : transS ([]::Names) S S1 (Scope'::Names) ** Trans2 : transE (Scope'::Names) E1 E2 ** H1 : is_stmt S H2 : is_expr E1 EN : stmtNames ([]::Names) S [] CtxS EN1 : exprNames CtxS E1 [] Ev : evalStmt FE_T ([]::EE_T) S1 EE3 O2 * Ev1 : evalExpr FE_T EE3 E2 V (Scope::EE_T') O3 * Ev2 : O2 ++ O3 = O SS' : scopes_same ([]::EE) ([]::EE_T) C' : ctx_names ([]::EE) ([]::Names) EvA1 : evalStmt FE ([]::EE) S (A::ARest) O2 SS2 : scopes_same (A::ARest) EE3 C2 : ctx_names (A::ARest) (Scope'::Names) H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S1 H5 : is_list (is_list is_string) (Scope'::Names) H6 : is_list (is_list (is_pair is_string is_value)) EE3 C2' : ctx_names (A::ARest) CtxS H7 : is_list (is_list is_string) CtxS H8 : exprNames (Scope'::Names) E1 [] EvA2 : evalExpr FE (A::ARest) E1 V (A1::ARest1) O3 H9 : forall K I, mem (K, I) A -> mem K Scope' H10 : forall K, mem K Scope' -> exists I, mem (K, I) A H11 : ctx_names ARest Names H12 : forall K I, mem (K, I) A1 -> mem K Scope' H13 : forall K, mem K Scope' -> exists I, mem (K, I) A1 H14 : ctx_names ARest1 Names ============================ exists EE', evalExpr FE EE (stmtExpr S E1) V EE' O
< search. Subgoal 1.18: Variables: Names EE EE_T FE FE_T V EE_T' O RF1 RF IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (recBuild RF) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) (recBuild RF1) @@ EN : exprNames Names (recBuild RF) [] Ev : evalExpr FE_T EE_T (recBuild RF1) V EE_T' O @ Trans1 : transRF Names RF RF1 ** ============================ exists EE', evalExpr FE EE (recBuild RF) V EE' O
< case IsE. Subgoal 1.18: Variables: Names EE EE_T FE FE_T V EE_T' O RF1 RF IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) (recBuild RF1) @@ EN : exprNames Names (recBuild RF) [] Ev : evalExpr FE_T EE_T (recBuild RF1) V EE_T' O @ Trans1 : transRF Names RF RF1 ** H1 : is_recFieldExprs RF ============================ exists EE', evalExpr FE EE (recBuild RF) V EE' O
< EN: case EN. Subgoal 1.18: Variables: Names EE EE_T FE FE_T V EE_T' O RF1 RF IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) (recBuild RF1) @@ Ev : evalExpr FE_T EE_T (recBuild RF1) V EE_T' O @ Trans1 : transRF Names RF RF1 ** H1 : is_recFieldExprs RF EN : recFieldNames Names RF [] ============================ exists EE', evalExpr FE EE (recBuild RF) V EE' O
< Ev: case Ev. Subgoal 1.18: Variables: Names EE EE_T FE FE_T EE_T' O RF1 RF VF IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) (recBuild RF1) @@ Trans1 : transRF Names RF RF1 ** H1 : is_recFieldExprs RF EN : recFieldNames Names RF [] Ev : evalRecFields FE_T EE_T RF1 VF EE_T' O * ============================ exists EE', evalExpr FE EE (recBuild RF) (recVal VF) EE' O
< apply IH_RF to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.18: Variables: Names EE EE_T FE FE_T EE_T' O RF1 RF VF EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recBuild RF) (recBuild RF1) @@ Trans1 : transRF Names RF RF1 ** H1 : is_recFieldExprs RF EN : recFieldNames Names RF [] Ev : evalRecFields FE_T EE_T RF1 VF EE_T' O * H2 : evalRecFields FE EE RF VF EE' O ============================ exists EE', evalExpr FE EE (recBuild RF) (recVal VF) EE' O
< search. Subgoal 1.19: Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (recFieldAccess E1 F) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@ EN : exprNames Names (recFieldAccess E1 F) [] Ev : evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O @ Trans1 : transE Names E1 E2 ** ============================ exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
< case IsE. Subgoal 1.19: Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@ EN : exprNames Names (recFieldAccess E1 F) [] Ev : evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O @ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 H2 : is_string F ============================ exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
< EN: case EN. Subgoal 1.19: Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@ Ev : evalExpr FE_T EE_T (recFieldAccess E2 F) V EE_T' O @ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 H2 : is_string F EN : exprNames Names E1 [] ============================ exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
< Ev: case Ev. Subgoal 1.19: Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 Fields IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 H2 : is_string F EN : exprNames Names E1 [] Ev : evalExpr FE_T EE_T E2 (recVal Fields) EE_T' O * Ev1 : lookup Fields F V ============================ exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
< apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 1.19: Variables: Names EE EE_T FE FE_T V EE_T' O F E2 E1 Fields EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (recFieldAccess E1 F) (recFieldAccess E2 F) @@ Trans1 : transE Names E1 E2 ** H1 : is_expr E1 H2 : is_string F EN : exprNames Names E1 [] Ev : evalExpr FE_T EE_T E2 (recVal Fields) EE_T' O * Ev1 : lookup Fields F V H3 : evalExpr FE EE E1 (recVal Fields) EE' O ============================ exists EE', evalExpr FE EE (recFieldAccess E1 F) V EE' O
< search. Subgoal 1.20: Variables: Names EE EE_T FE FE_T V EE_T' O Ty E2 E1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr (errorExpr E1 Ty) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names (errorExpr E1 Ty) (errorExpr E2 Ty) @@ EN : exprNames Names (errorExpr E1 Ty) [] Ev : evalExpr FE_T EE_T (errorExpr E2 Ty) V EE_T' O @ Trans1 : transE Names E1 E2 ** ============================ exists EE', evalExpr FE EE (errorExpr E1 Ty) V EE' O
< case Ev. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< apply join_is to _ Trans1. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< IsE_P: apply proj_expr_is to Trans2 _ _. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< EN_P: apply exprNames_exists to IsE_P IsNames. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P N1 ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< Eq: assert N1 = []. Subgoal 1.21.1: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P N1 ============================ N1 = []
< IsN1: apply exprNames_is to _ _ EN_P. Subgoal 1.21.1: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P N1 IsN1 : is_list is_string N1 ============================ N1 = []
< IsN1: case IsN1. Subgoal 1.21.1.1: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P [] ============================ [] = []
< search. Subgoal 1.21.1.2: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P T1 H IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P (H::T1) IsN1 : is_string H IsN2 : is_list is_string T1 ============================ H::T1 = []
< M': apply proj_exprNames to Trans2 _ _ _ EN EN_P _ with X = H. Subgoal 1.21.1.2: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P T1 H IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P (H::T1) IsN1 : is_string H IsN2 : is_list is_string T1 M' : mem H [] ============================ H::T1 = []
< case M'. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P N1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P N1 Eq : N1 = [] ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< case Eq. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P [] ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< EvP: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans3 _ Ev. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P [] EvP : evalExpr FE EE E_P V EE' O ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< Names: apply names_exists to IsEE. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P [] EvP : evalExpr FE EE E_P V EE' O Names : names EE N2 ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< IsN1: apply names_is to _ Names. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P [] EvP : evalExpr FE EE E_P V EE' O Names : names EE N2 IsN1 : is_list is_string N2 ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< Pr: apply proj_expr_other to Trans2 _ _ IsN1. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N E_P EE' N2 E'' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E_P Trans3 : transE Names E_P T ** H1 : is_list is_string N IsE_P : is_expr E_P EN_P : exprNames Names E_P [] EvP : evalExpr FE EE E_P V EE' O Names : names EE N2 IsN1 : is_list is_string N2 Pr : N2 |{expr}- <unknown I expr> ~~> E'' ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< apply proj_expr_unique_ctx_names to _ _ _ _ _ _ Trans2 Pr. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N EE' N2 E'' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E'' Trans3 : transE Names E'' T ** H1 : is_list is_string N IsE_P : is_expr E'' EN_P : exprNames Names E'' [] EvP : evalExpr FE EE E'' V EE' O Names : names EE N2 IsN1 : is_list is_string N2 Pr : N2 |{expr}- <unknown I expr> ~~> E'' ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< apply proj_evalExpr_backward to Pr Names _ _ _ _ Ctxs _ EvP. Subgoal 1.21: Variables: T Names EE EE_T FE FE_T V EE_T' O N EE' N2 E'' EE'' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsE : is_expr <unknown I expr> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transE Names <unknown I expr> T @@ EN : exprNames Names <unknown I expr> [] Ev : evalExpr FE_T EE_T T V EE_T' O @ Trans1 : join Names N Trans2 : N |{expr}- <unknown I expr> ~~> E'' Trans3 : transE Names E'' T ** H1 : is_list is_string N IsE_P : is_expr E'' EN_P : exprNames Names E'' [] EvP : evalExpr FE EE E'' V EE' O Names : names EE N2 IsN1 : is_list is_string N2 Pr : N2 |{expr}- <unknown I expr> ~~> E'' H2 : evalExpr FE EE <unknown I expr> V EE'' O H3 : scopes_same EE' EE'' ============================ exists EE', evalExpr FE EE <unknown I expr> V EE' O
< search. Subgoal 2.1: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' noop noop Names' @@ SN : stmtNames Names' noop [] Names'' Ev : evalStmt FE_T EE_T noop EE_T' O @ ============================ exists EE', evalStmt FE (Scope::EE) noop EE' O
< case Ev. Subgoal 2.1: Variables: Names' Names'' Scope EE FE FE_T EE_T' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt noop IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T' Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' noop noop Names' @@ SN : stmtNames Names' noop [] Names'' ============================ exists EE', evalStmt FE (Scope::EE) noop EE' []
< search. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (seq S1 S2) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ SN : stmtNames Names (seq S1 S2) [] Names'' Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< case IsS. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ SN : stmtNames Names (seq S1 S2) [] Names'' Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< SN: case SN. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 N1 Ctx1 N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 N1 Ctx1 SN1 : stmtNames Ctx1 S2 N2 Names'' SN2 : N1 ++ N2 = [] ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< case SN2. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Ev : evalStmt FE_T EE_T (seq S11 S21) EE_T' O @ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< Ev: case Ev. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< EvA1: apply IH_S to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply evalStmt_isCtx to _ _ _ EvA1. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply transS_is to _ _ Trans1. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply evalStmt_isCtx to _ _ _ Ev. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< SS': apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< C': apply evalStmt_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 C' : ctx_names EE' Names3 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply transS_isNames to _ _ Trans1. Subgoal 2.2: Variables: Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS Names S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames Names S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 C' : ctx_names EE' Names3 H6 : is_list (is_list is_string) Names3 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< case Ctxs (keep). Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names3 S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' BRest B IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 Names3 ** Trans2 : transS Names3 S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 C' : ctx_names EE' Names3 H6 : is_list (is_list is_string) Names3 H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply transS_old_scopes to _ _ Trans1. Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 Ctx1 EE3 O2 O3 EE' BRest B Scope' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 C' : ctx_names EE' (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< case C' (keep). Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 Ctx1 EE3 O2 O3 BRest B Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] Ctx1 SN1 : stmtNames Ctx1 S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply stmtNames_keep_older to _ _ SN. Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< apply stmtNames_isCtx to _ _ SN. Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< C'': apply evalStmt_ctx_names to _ _ _ _ Ctxs SN EvA1. Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< SN2: apply stmtNames_relatedCtxs to _ _ _ _ _ SN1 with CtxB = BRest ScopeB = Scope'. Subgoal 2.2.1: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) ============================ forall X, mems X (Scope'::BRest) -> mems X (Scope'1::BRest)
< intros M. Subgoal 2.2.1: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) M : mems X (Scope'::BRest) ============================ mems X (Scope'1::BRest)
< apply ctx_names_mems to C' C'' M. Subgoal 2.2.1: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) M : mems X (Scope'::BRest) H15 : mems X (Scope'1::BRest) ============================ mems X (Scope'1::BRest)
< search. Subgoal 2.2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) ============================ forall X, mems X (Scope'1::BRest) -> mems X (Scope'::BRest)
< intros M. Subgoal 2.2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) M : mems X (Scope'1::BRest) ============================ mems X (Scope'::BRest)
< apply ctx_names_mems to C'' C' M. Subgoal 2.2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 X IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) M : mems X (Scope'1::BRest) H15 : mems X (Scope'::BRest) ============================ mems X (Scope'::BRest)
< search. Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 CtxB' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) SN2 : stmtNames (Scope'::BRest) S2 [] CtxB' ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS' C' Trans2 SN2 Ev1. Subgoal 2.2: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O S21 S11 S2 S1 EE3 O2 O3 BRest B Scope' ARest A Scope'1 CtxB' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) (seq S1 S2) (seq S11 S21) Names' @@ Trans1 : transS (B::BRest) S1 S11 (Scope'::BRest) ** Trans2 : transS (Scope'::BRest) S2 S21 Names' ** H1 : is_stmt S1 H2 : is_stmt S2 SN : stmtNames (B::BRest) S1 [] (Scope'1::BRest) SN1 : stmtNames (Scope'1::BRest) S2 [] Names'' Ev : evalStmt FE_T EE_T S11 EE3 O2 * Ev1 : evalStmt FE_T EE3 S21 EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalStmt FE (Scope::EE) S1 (A::ARest) O2 H3 : is_list (is_list (is_pair is_string is_value)) (A::ARest) H4 : is_stmt S11 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same (A::ARest) EE3 C' : ctx_names (A::ARest) (Scope'::BRest) H6 : is_list (is_list is_string) (Scope'::BRest) H7 : forall K I, mem (K, I) Scope -> mem K B H8 : forall K, mem K B -> exists I, mem (K, I) Scope H9 : ctx_names EE BRest H10 : forall K I, mem (K, I) A -> mem K Scope' H11 : forall K, mem K Scope' -> exists I, mem (K, I) A H12 : ctx_names ARest BRest H13 : forall X, mem X B -> mem X Scope'1 H14 : is_list (is_list is_string) (Scope'1::BRest) C'' : ctx_names (A::ARest) (Scope'1::BRest) SN2 : stmtNames (Scope'::BRest) S2 [] CtxB' EvA2 : evalStmt FE (A::ARest) S2 EE'1 O3 ============================ exists EE', evalStmt FE (Scope::EE) (seq S1 S2) EE' O
< search. Subgoal 2.3: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names1 Scope1 X E1 Ty E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (declare Ty X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ SN : stmtNames (Scope1::Names1) (declare Ty X E) [] Names'' Ev : evalStmt FE_T EE_T (declare Ty X E1) EE_T' O @ Trans1 : transE (Scope1::Names1) E E1 ** ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< case IsS. Subgoal 2.3: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names1 Scope1 X E1 Ty E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ SN : stmtNames (Scope1::Names1) (declare Ty X E) [] Names'' Ev : evalStmt FE_T EE_T (declare Ty X E1) EE_T' O @ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< SN: case SN. Subgoal 2.3: Variables: Scope EE EE_T FE FE_T EE_T' O Names1 Scope1 X E1 Ty E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ Ev : evalStmt FE_T EE_T (declare Ty X E1) EE_T' O @ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E SN : exprNames (Scope1::Names1) E [] ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< Ev: case Ev. Subgoal 2.3: Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E SN : exprNames (Scope1::Names1) E [] Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O * ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.3: Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E SN : exprNames (Scope1::Names1) E [] Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O * EvA : evalExpr FE (Scope::EE) E V EE' O ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< apply transE_is to _ _ Trans1. Subgoal 2.3: Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E SN : exprNames (Scope1::Names1) E [] Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O * EvA : evalExpr FE (Scope::EE) E V EE' O H4 : is_expr E1 ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< C: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvA. Subgoal 2.3: Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E SN : exprNames (Scope1::Names1) E [] Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O * EvA : evalExpr FE (Scope::EE) E V EE' O H4 : is_expr E1 C : ctx_names EE' (Scope1::Names1) ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< case C. Subgoal 2.3: Variables: Scope EE EE_T FE FE_T O Names1 Scope1 X E1 Ty E EE2 Scope2 V ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (Scope1::Names1) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (Scope1::Names1) Trans : transS (Scope1::Names1) (declare Ty X E) (declare Ty X E1) ((X::Scope1)::Names1) @@ Trans1 : transE (Scope1::Names1) E E1 ** H1 : is_typ Ty H2 : is_string X H3 : is_expr E SN : exprNames (Scope1::Names1) E [] Ev : evalExpr FE_T EE_T E1 V (Scope2::EE2) O * EvA : evalExpr FE (Scope::EE) E V (A::ARest) O H4 : is_expr E1 H5 : forall K I, mem (K, I) A -> mem K Scope1 H6 : forall K, mem K Scope1 -> exists I, mem (K, I) A H7 : ctx_names ARest Names1 ============================ exists EE', evalStmt FE (Scope::EE) (declare Ty X E) EE' O
< search. Subgoal 2.4: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (assign X E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @@ SN : stmtNames Names' (assign X E) [] Names'' Ev : evalStmt FE_T EE_T (assign X E1) EE_T' O @ Trans1 : transE Names' E E1 ** ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< case IsS. Subgoal 2.4: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (assign X E) (assign X E1) Names' @@ SN : stmtNames Names' (assign X E) [] Names'' Ev : evalStmt FE_T EE_T (assign X E1) EE_T' O @ Trans1 : transE Names' E E1 ** H1 : is_string X H2 : is_expr E ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< SN: case SN. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Ev : evalStmt FE_T EE_T (assign X E1) EE_T' O @ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< Ev: case Ev. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< apply transE_is to _ _ Trans1. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O H3 : is_expr E1 ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O H3 : is_expr E1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< apply evalExpr_isCtx to _ _ _ EvA. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O H3 : is_expr E1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA Ev. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O H3 : is_expr E1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS' : scopes_same EE' EE3 ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< SS'': apply scopes_same_symm to SS'. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O H3 : is_expr E1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS' : scopes_same EE' EE3 SS'' : scopes_same EE3 EE' ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< apply scopes_same_replaceScopes_exists to _ _ _ SS'' Ev1. Subgoal 2.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 X E V EE3 EE' B' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (assign X E) (assign X E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string X H2 : is_expr E SN : mems X Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : replaceScopes X V EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O H3 : is_expr E1 H4 : is_list (is_list (is_pair is_string is_value)) EE3 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS' : scopes_same EE' EE3 SS'' : scopes_same EE3 EE' H6 : replaceScopes X V EE' B' ============================ exists EE', evalStmt FE (Scope::EE) (assign X E) EE' O
< search. Subgoal 2.5: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (recUpdate Rec Fs E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @@ SN : stmtNames Names' (recUpdate Rec Fs E) [] Names'' Ev : evalStmt FE_T EE_T (recUpdate Rec Fs E1) EE_T' O @ Trans1 : transE Names' E E1 ** ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< case IsS. Subgoal 2.5: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names' @@ SN : stmtNames Names' (recUpdate Rec Fs E) [] Names'' Ev : evalStmt FE_T EE_T (recUpdate Rec Fs E1) EE_T' O @ Trans1 : transE Names' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< SN: case SN. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Ev : evalStmt FE_T EE_T (recUpdate Rec Fs E1) EE_T' O @ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< Ev: case Ev. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< SS': apply scopes_same_symm to SS. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< L: apply scopes_same_lookupScopes_exists to _ _ SS' Ev1. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< apply transE_is to _ _ Trans1. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) H4 : is_expr E1 ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< apply evalExpr_isCtx to _ _ _ EvA. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE' H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< SS2: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA Ev. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE' H6 : is_list (is_list (is_pair is_string is_value)) EE3 SS2 : scopes_same EE' EE3 ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< SS2': apply scopes_same_symm to SS2. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE' H6 : is_list (is_list (is_pair is_string is_value)) EE3 SS2 : scopes_same EE' EE3 SS2' : scopes_same EE3 EE' ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< apply scopes_same_replaceScopes_exists to _ _ _ SS2' Ev3. Subgoal 2.5: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 Fs Rec E V EE3 FieldVals NewVals EE' B' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (recUpdate Rec Fs E) (recUpdate Rec Fs E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_string Rec H2 : is_list is_string Fs H3 : is_expr E SN : mems Rec Names'' SN1 : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 V EE3 O * Ev1 : lookupScopes Rec EE_T (recVal FieldVals) Ev2 : updateRecFields Fs V FieldVals NewVals Ev3 : replaceScopes Rec (recVal NewVals) EE3 EE_T' EvA : evalExpr FE (Scope::EE) E V EE' O SS' : scopes_same EE_T (Scope::EE) L : lookupScopes Rec (Scope::EE) (recVal FieldVals) H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE' H6 : is_list (is_list (is_pair is_string is_value)) EE3 SS2 : scopes_same EE' EE3 SS2' : scopes_same EE3 EE' H7 : replaceScopes Rec (recVal NewVals) EE' B' ============================ exists EE', evalStmt FE (Scope::EE) (recUpdate Rec Fs E) EE' O
< search. Subgoal 2.6: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (ifThenElse Cond Th El) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @@ SN : stmtNames Names' (ifThenElse Cond Th El) [] Names'' Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @ Trans1 : transE Names' Cond Cond1 ** Trans2 : transS ([]::Names') Th Th1 NamesTh ** Trans3 : transS ([]::Names') El El1 NamesEl ** ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< case IsS. Subgoal 2.6: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names' @@ SN : stmtNames Names' (ifThenElse Cond Th El) [] Names'' Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @ Trans1 : transE Names' Cond Cond1 ** Trans2 : transS ([]::Names') Th Th1 NamesTh ** Trans3 : transS ([]::Names') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< SN: case SN. Subgoal 2.6: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CN TN CtxT FN CtxF N1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond CN SN1 : stmtNames ([]::Names'') Th TN CtxT SN2 : stmtNames ([]::Names'') El FN CtxF SN3 : CN ++ TN = N1 SN4 : N1 ++ FN = [] ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< case SN4. Subgoal 2.6: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CN TN CtxT CtxF IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond CN SN1 : stmtNames ([]::Names'') Th TN CtxT SN2 : stmtNames ([]::Names'') El [] CtxF SN3 : CN ++ TN = [] ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< case SN3. Subgoal 2.6: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Ev : evalStmt FE_T EE_T (ifThenElse Cond1 Th1 El1) EE_T' O @ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< Ev: case Ev. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply transE_is to _ _ Trans1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< SS1: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< C1: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvA1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< SS1': apply scopes_same_add_scope to SS1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< C1': apply ctx_names_add_scope to C1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS1' C1' Trans2 _ Ev1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Th EE'1 O3 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< C2: apply evalStmt_ctx_names to _ _ _ _ C1' SN1 EvA2. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Th EE'1 O3 C2 : ctx_names EE'1 CtxT ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply stmtNames_keep_older to _ _ SN1. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxF EE3 O2 Scope1 O3 EE' EE'1 Scope' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] (Scope'::Names'') SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Th EE'1 O3 C2 : ctx_names EE'1 (Scope'::Names'') H7 : forall X, mem X [] -> mem X Scope' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< case C2. Subgoal 2.6.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxF EE3 O2 Scope1 O3 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] (Scope'::Names'') SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 trueVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) Th1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Th (A::ARest) O3 H7 : forall X, mem X [] -> mem X Scope' H8 : forall K I, mem (K, I) A -> mem K Scope' H9 : forall K, mem K Scope' -> exists I, mem (K, I) A H10 : ctx_names ARest Names'' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< search. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply transE_is to _ _ Trans1. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< SS1: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< C1: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN EvA1. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< SS1': apply scopes_same_add_scope to SS1. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< C1': apply ctx_names_add_scope to C1. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS1' C1' Trans3 _ Ev1. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') El EE'1 O3 ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< C2: apply evalStmt_ctx_names to _ _ _ _ C1' SN2 EvA2. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT CtxF EE3 O2 Scope1 O3 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] CtxF Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') El EE'1 O3 C2 : ctx_names EE'1 CtxF ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< apply stmtNames_keep_older to _ _ SN2. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT EE3 O2 Scope1 O3 EE' EE'1 Scope' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') El EE'1 O3 C2 : ctx_names EE'1 (Scope'::Names'') H7 : forall X, mem X [] -> mem X Scope' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< case C2. Subgoal 2.6.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O NamesTh NamesEl El1 Th1 Cond1 El Th Cond CtxT EE3 O2 Scope1 O3 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (ifThenElse Cond Th El) (ifThenElse Cond1 Th1 El1) Names'' @@ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Th Th1 NamesTh ** Trans3 : transS ([]::Names'') El El1 NamesEl ** H1 : is_expr Cond H2 : is_stmt Th H3 : is_stmt El SN : exprNames Names'' Cond [] SN1 : stmtNames ([]::Names'') Th [] CtxT SN2 : stmtNames ([]::Names'') El [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 falseVal EE3 O2 * Ev1 : evalStmt FE_T ([]::EE3) El1 (Scope1::EE_T') O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE (Scope::EE) Cond falseVal EE' O2 H4 : is_expr Cond1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 H6 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE3 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE3) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') El (A::ARest) O3 H7 : forall X, mem X [] -> mem X Scope' H8 : forall K I, mem (K, I) A -> mem K Scope' H9 : forall K, mem K Scope' -> exists I, mem (K, I) A H10 : ctx_names ARest Names'' ============================ exists EE', evalStmt FE (Scope::EE) (ifThenElse Cond Th El) EE' O
< search. Subgoal 2.7: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (while Cond Body) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @@ SN : stmtNames Names' (while Cond Body) [] Names'' Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @ Trans1 : transE Names' Cond Cond1 ** Trans2 : transS ([]::Names') Body Body1 Names2 ** ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case IsS. Subgoal 2.7: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (while Cond Body) (while Cond1 Body1) Names' @@ SN : stmtNames Names' (while Cond Body) [] Names'' Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @ Trans1 : transE Names' Cond Cond1 ** Trans2 : transS ([]::Names') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< SN: case SN (keep). Subgoal 2.7: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CN BN CtxB IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond CN SN2 : stmtNames ([]::Names'') Body BN CtxB SN3 : CN ++ BN = [] ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case SN3. Subgoal 2.7: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Ev : evalStmt FE_T EE_T (while Cond1 Body1) EE_T' O @ Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< Ev: case Ev. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply transE_is to _ _ Trans1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< SS1: apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< C1: apply evalExpr_ctx_names to _ _ _ _ Ctxs SN1 EvA1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< SS1': apply scopes_same_add_scope to SS1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< C1': apply ctx_names_add_scope to C1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< EvA2: apply IH_S to _ _ _ _ _ _ RFE _ SS1' C1' Trans2 _ Ev1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body EE'1 O3 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< C2: apply evalStmt_ctx_names to _ _ _ _ C1' SN2 EvA2. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE2 O2 Scope1 EE4 O3 O4 O12 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body EE'1 O3 C2 : ctx_names EE'1 CtxB ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply stmtNames_keep_older to _ _ SN2. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' EE'1 Scope' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body EE'1 O3 C2 : ctx_names EE'1 (Scope'::Names'') H6 : forall X, mem X [] -> mem X Scope' ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< C: case C2. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply transS_is to _ _ Trans2. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< IsEE4+: apply evalStmt_isCtx to _ _ _ Ev1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 IsEE4+ : is_list (is_list (is_pair is_string is_value)) (Scope1::EE4) ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case IsEE4+. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< IsAR+: apply evalStmt_isCtx to _ _ _ EvA2. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 IsAR+ : is_list (is_list (is_pair is_string is_value)) (A::ARest) ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case IsAR+. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< SS2: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans2 EvA2 Ev1. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest SS2 : scopes_same (A::ARest) (Scope1::EE4) ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< SS2': case SS2. Subgoal 2.7.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] (Scope'::Names'') Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' Names'' SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::Names'') EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest Names'' H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same ARest EE4 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case Ctxs. Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A BRest B IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' (B::BRest) SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::(B::BRest)) EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same ARest EE4 H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply transS_old_scopes to _ _ Trans2. Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A BRest B Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' (B::BRest) SS1' : scopes_same ([]::EE') ([]::EE2) C1' : ctx_names ([]::EE') ([]::(B::BRest)) EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same ARest EE4 H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< C': case C1'. Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 EE' Scope' ARest A BRest B Scope'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal EE' O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) EE' SS1 : scopes_same EE' EE2 C1 : ctx_names EE' (B::BRest) SS1' : scopes_same ([]::EE') ([]::EE2) EvA2 : evalStmt FE ([]::EE') Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same ARest EE4 H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest C' : forall K I, mem (K, I) [] -> mem K [] C'1 : forall K, mem K [] -> exists I, mem (K, I) [] C'2 : ctx_names EE' (B::BRest) ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case C'2. Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 Scope' ARest A BRest B Scope'1 ARest1 A1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) SS1 : scopes_same (A1::ARest1) EE2 C1 : ctx_names (A1::ARest1) (B::BRest) SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2) EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::ARest) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names ARest (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) ARest SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same ARest EE4 H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest C' : forall K I, mem (K, I) [] -> mem K [] C'1 : forall K, mem K [] -> exists I, mem (K, I) [] H15 : forall K I, mem (K, I) A1 -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) A1 H17 : ctx_names ARest1 BRest ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case C3 (keep). Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 EE4 O3 O4 O12 Scope' A BRest B Scope'1 ARest1 A1 ARest2 A2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::EE4) O3 * Ev2 : evalStmt FE_T EE4 (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) SS1 : scopes_same (A1::ARest1) EE2 C1 : ctx_names (A1::ARest1) (B::BRest) SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2) EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::(A2::ARest2)) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names (A2::ARest2) (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) EE4 H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) (A2::ARest2) SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same (A2::ARest2) EE4 H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest C' : forall K I, mem (K, I) [] -> mem K [] C'1 : forall K, mem K [] -> exists I, mem (K, I) [] H15 : forall K I, mem (K, I) A1 -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) A1 H17 : ctx_names ARest1 BRest H18 : forall K I, mem (K, I) A2 -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A2 H20 : ctx_names ARest2 BRest ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< case SS2'2 (keep). Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 O3 O4 O12 Scope' A BRest B Scope'1 ARest1 A1 ARest2 A2 BRest1 B1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::(B1::BRest1)) O3 * Ev2 : evalStmt FE_T (B1::BRest1) (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) SS1 : scopes_same (A1::ARest1) EE2 C1 : ctx_names (A1::ARest1) (B::BRest) SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2) EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::(A2::ARest2)) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names (A2::ARest2) (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) (A2::ARest2) SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same (A2::ARest2) (B1::BRest1) H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest C' : forall K I, mem (K, I) [] -> mem K [] C'1 : forall K, mem K [] -> exists I, mem (K, I) [] H15 : forall K I, mem (K, I) A1 -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) A1 H17 : ctx_names ARest1 BRest H18 : forall K I, mem (K, I) A2 -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A2 H20 : ctx_names ARest2 BRest H21 : forall X V, lookup A2 X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A2 X V H23 : scopes_same ARest2 BRest1 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply IH_S_E to _ _ _ _ _ _ RFE _ SS2'2 C3 Trans _ Ev2. Subgoal 2.7.1: Variables: Scope EE EE_T FE FE_T EE_T' O Body1 Cond1 Body Cond EE2 O2 Scope1 O3 O4 O12 Scope' A BRest B Scope'1 ARest1 A1 ARest2 A2 BRest1 B1 EE'2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Trans : transS (B::BRest) (while Cond Body) (while Cond1 Body1) (B::BRest) @@ SN : stmtNames (B::BRest) (while Cond Body) [] (B::BRest) Trans1 : transE (B::BRest) Cond Cond1 ** Trans2 : transS ([]::(B::BRest)) Body Body1 (Scope'1::(B::BRest)) ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames (B::BRest) Cond [] SN2 : stmtNames ([]::(B::BRest)) Body [] (Scope'::(B::BRest)) Ev : evalExpr FE_T EE_T Cond1 trueVal EE2 O2 * Ev1 : evalStmt FE_T ([]::EE2) Body1 (Scope1::(B1::BRest1)) O3 * Ev2 : evalStmt FE_T (B1::BRest1) (while Cond1 Body1) EE_T' O4 * Ev3 : O2 ++ O3 = O12 Ev4 : O12 ++ O4 = O EvA1 : evalExpr FE (Scope::EE) Cond trueVal (A1::ARest1) O2 H3 : is_expr Cond1 H4 : is_list (is_list (is_pair is_string is_value)) EE2 H5 : is_list (is_list (is_pair is_string is_value)) (A1::ARest1) SS1 : scopes_same (A1::ARest1) EE2 C1 : ctx_names (A1::ARest1) (B::BRest) SS1' : scopes_same ([]::(A1::ARest1)) ([]::EE2) EvA2 : evalStmt FE ([]::(A1::ARest1)) Body (A::(A2::ARest2)) O3 H6 : forall X, mem X [] -> mem X Scope' C : forall K I, mem (K, I) A -> mem K Scope' C2 : forall K, mem K Scope' -> exists I, mem (K, I) A C3 : ctx_names (A2::ARest2) (B::BRest) H7 : is_stmt Body1 H8 : is_list (is_pair is_string is_value) Scope1 H9 : is_list (is_list (is_pair is_string is_value)) (B1::BRest1) H10 : is_list (is_pair is_string is_value) A H11 : is_list (is_list (is_pair is_string is_value)) (A2::ARest2) SS2' : forall X V, lookup A X V -> lookup Scope1 X V SS2'1 : forall X V, lookup Scope1 X V -> lookup A X V SS2'2 : scopes_same (A2::ARest2) (B1::BRest1) H12 : forall K I, mem (K, I) Scope -> mem K B H13 : forall K, mem K B -> exists I, mem (K, I) Scope H14 : ctx_names EE BRest C' : forall K I, mem (K, I) [] -> mem K [] C'1 : forall K, mem K [] -> exists I, mem (K, I) [] H15 : forall K I, mem (K, I) A1 -> mem K B H16 : forall K, mem K B -> exists I, mem (K, I) A1 H17 : ctx_names ARest1 BRest H18 : forall K I, mem (K, I) A2 -> mem K B H19 : forall K, mem K B -> exists I, mem (K, I) A2 H20 : ctx_names ARest2 BRest H21 : forall X V, lookup A2 X V -> lookup B1 X V H22 : forall X V, lookup B1 X V -> lookup A2 X V H23 : scopes_same ARest2 BRest1 H24 : evalStmt FE (A2::ARest2) (while Cond Body) EE'2 O4 ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< search. Subgoal 2.7.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 falseVal EE_T' O * ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.7.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 Body1 Cond1 Body Cond CtxB EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (while Cond Body) (while Cond1 Body1) Names'' @@ SN : stmtNames Names'' (while Cond Body) [] Names'' Trans1 : transE Names'' Cond Cond1 ** Trans2 : transS ([]::Names'') Body Body1 Names2 ** H1 : is_expr Cond H2 : is_stmt Body SN1 : exprNames Names'' Cond [] SN2 : stmtNames ([]::Names'') Body [] CtxB Ev : evalExpr FE_T EE_T Cond1 falseVal EE_T' O * H3 : evalExpr FE (Scope::EE) Cond falseVal EE' O ============================ exists EE', evalStmt FE (Scope::EE) (while Cond Body) EE' O
< search. Subgoal 2.8: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (scopeStmt S1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @@ SN : stmtNames Names' (scopeStmt S1) [] Names'' Ev : evalStmt FE_T EE_T (scopeStmt S2) EE_T' O @ Trans1 : transS ([]::Names') S1 S2 Names2 ** ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< case IsS. Subgoal 2.8: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (scopeStmt S1) (scopeStmt S2) Names' @@ SN : stmtNames Names' (scopeStmt S1) [] Names'' Ev : evalStmt FE_T EE_T (scopeStmt S2) EE_T' O @ Trans1 : transS ([]::Names') S1 S2 Names2 ** H1 : is_stmt S1 ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< SN: case SN. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Ev : evalStmt FE_T EE_T (scopeStmt S2) EE_T' O @ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< Ev: case Ev. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O * ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< SS': apply scopes_same_add_scope to SS. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O * SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< C': apply ctx_names_add_scope to Ctxs. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O * SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) C' : ctx_names ([]::(Scope::EE)) ([]::Names'') ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< EvA: apply IH_S to _ _ _ _ _ _ RFE _ SS' C' Trans1 _ Ev. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O * SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) C' : ctx_names ([]::(Scope::EE)) ([]::Names'') EvA : evalStmt FE ([]::(Scope::EE)) S1 EE' O ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< SS1: apply trans_evalStmt_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA Ev. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O * SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) C' : ctx_names ([]::(Scope::EE)) ([]::Names'') EvA : evalStmt FE ([]::(Scope::EE)) S1 EE' O SS1 : scopes_same EE' (Scope1::EE_T') ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< case SS1. Subgoal 2.8: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O Names2 S2 S1 Ctx1 Scope1 ARest A IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (scopeStmt S1) (scopeStmt S2) Names'' @@ Trans1 : transS ([]::Names'') S1 S2 Names2 ** H1 : is_stmt S1 SN : stmtNames ([]::Names'') S1 [] Ctx1 Ev : evalStmt FE_T ([]::EE_T) S2 (Scope1::EE_T') O * SS' : scopes_same ([]::(Scope::EE)) ([]::EE_T) C' : ctx_names ([]::(Scope::EE)) ([]::Names'') EvA : evalStmt FE ([]::(Scope::EE)) S1 (A::ARest) O H2 : forall X V, lookup A X V -> lookup Scope1 X V H3 : forall X V, lookup Scope1 X V -> lookup A X V H4 : scopes_same ARest EE_T' ============================ exists EE', evalStmt FE (Scope::EE) (scopeStmt S1) EE' O
< search. Subgoal 2.9: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt (printVal E) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @@ SN : stmtNames Names' (printVal E) [] Names'' Ev : evalStmt FE_T EE_T (printVal E1) EE_T' O @ Trans1 : transE Names' E E1 ** ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< case IsS. Subgoal 2.9: Variables: Names' Names'' Scope EE EE_T FE FE_T EE_T' O E1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names' Trans : transS Names' (printVal E) (printVal E1) Names' @@ SN : stmtNames Names' (printVal E) [] Names'' Ev : evalStmt FE_T EE_T (printVal E1) EE_T' O @ Trans1 : transE Names' E E1 ** H1 : is_expr E ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< SN: case SN. Subgoal 2.9: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Ev : evalStmt FE_T EE_T (printVal E1) EE_T' O @ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< Ev: case Ev. Subgoal 2.9.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E I O2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 (intVal I) EE_T' O2 * Ev1 : O2 ++ [intVal I] = O ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.9.1: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E I O2 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 (intVal I) EE_T' O2 * Ev1 : O2 ++ [intVal I] = O EvA : evalExpr FE (Scope::EE) E (intVal I) EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< search. Subgoal 2.9.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 trueVal EE_T' O2 * Ev1 : O2 ++ [trueVal] = O ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.9.2: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 trueVal EE_T' O2 * Ev1 : O2 ++ [trueVal] = O EvA : evalExpr FE (Scope::EE) E trueVal EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< search. Subgoal 2.9.3: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 falseVal EE_T' O2 * Ev1 : O2 ++ [falseVal] = O ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.9.3: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E O2 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 falseVal EE_T' O2 * Ev1 : O2 ++ [falseVal] = O EvA : evalExpr FE (Scope::EE) E falseVal EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< search. Subgoal 2.9.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E S1 O2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 (stringVal S1) EE_T' O2 * Ev1 : O2 ++ [stringVal S1] = O ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< EvA: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 2.9.4: Variables: Names'' Scope EE EE_T FE FE_T EE_T' O E1 E S1 O2 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names'' RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names'' Trans : transS Names'' (printVal E) (printVal E1) Names'' @@ Trans1 : transE Names'' E E1 ** H1 : is_expr E SN : exprNames Names'' E [] Ev : evalExpr FE_T EE_T E1 (stringVal S1) EE_T' O2 * Ev1 : O2 ++ [stringVal S1] = O EvA : evalExpr FE (Scope::EE) E (stringVal S1) EE' O2 ============================ exists EE', evalStmt FE (Scope::EE) (printVal E) EE' O
< search. Subgoal 2.10: Variables: T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown I stmt> T Names' @@ SN : stmtNames Names <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' ** ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< apply join_is to _ Trans1. Subgoal 2.10: Variables: T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown I stmt> T Names' @@ SN : stmtNames Names <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' ** H1 : is_list is_string N ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< IsS_P: apply proj_stmt_is to Trans2 _ _. Subgoal 2.10: Variables: T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) Names Trans : transS Names <unknown I stmt> T Names' @@ SN : stmtNames Names <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join Names N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS Names S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< case Ctxs (keep). Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< SN_P: apply stmtNames_exists to IsS_P IsNames. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P N1 Ctx' ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< Eq: assert N1 = []. Subgoal 2.10.1: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P N1 Ctx' ============================ N1 = []
< IsN1: apply stmtNames_is to _ _ SN_P. Subgoal 2.10.1: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P N1 Ctx' IsN1 : is_list is_string N1 ============================ N1 = []
< IsN1: case IsN1. Subgoal 2.10.1.1: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P [] Ctx' ============================ [] = []
< search. Subgoal 2.10.1.2: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' T1 H IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P (H::T1) Ctx' IsN1 : is_string H IsN2 : is_list is_string T1 ============================ H::T1 = []
< M': apply proj_stmtNames to Trans2 _ _ _ SN SN_P _ with X = H. Subgoal 2.10.1.2: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' T1 H IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P (H::T1) Ctx' IsN1 : is_string H IsN2 : is_list is_string T1 M' : mem H [] ============================ H::T1 = []
< case M'. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B N1 Ctx' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P N1 Ctx' Eq : N1 = [] ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< case Eq. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P [] Ctx' ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< EvP: apply IH_S to _ _ _ _ _ _ RFE _ SS Ctxs Trans3 _ Ev. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P [] Ctx' EvP : evalStmt FE (Scope::EE) S_P EE' O ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< Names: apply names_exists to IsEE. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P [] Ctx' EvP : evalStmt FE (Scope::EE) S_P EE' O Names : names (Scope::EE) N2 ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< IsN1: apply names_is to _ Names. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' N2 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P [] Ctx' EvP : evalStmt FE (Scope::EE) S_P EE' O Names : names (Scope::EE) N2 IsN1 : is_list is_string N2 ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< Pr: apply proj_stmt_other to Trans2 _ _ IsN1. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N S_P BRest B Ctx' EE' N2 S'' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S_P Trans3 : transS (B::BRest) S_P T Names' ** H1 : is_list is_string N IsS_P : is_stmt S_P H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S_P [] Ctx' EvP : evalStmt FE (Scope::EE) S_P EE' O Names : names (Scope::EE) N2 IsN1 : is_list is_string N2 Pr : N2 |{stmt}- <unknown I stmt> ~~> S'' ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< apply proj_stmt_unique_ctx_names to _ _ _ _ _ _ Trans2 Pr. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N BRest B Ctx' EE' N2 S'' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S'' Trans3 : transS (B::BRest) S'' T Names' ** H1 : is_list is_string N IsS_P : is_stmt S'' H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S'' [] Ctx' EvP : evalStmt FE (Scope::EE) S'' EE' O Names : names (Scope::EE) N2 IsN1 : is_list is_string N2 Pr : N2 |{stmt}- <unknown I stmt> ~~> S'' ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< apply proj_evalStmt_backward to Pr Names _ _ _ _ Ctxs _ EvP. Subgoal 2.10: Variables: T Names' Names'' Scope EE EE_T FE FE_T EE_T' O N BRest B Ctx' EE' N2 S'' EE'' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsS : is_stmt <unknown I stmt> IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) (Scope::EE) IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) (B::BRest) RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same (Scope::EE) EE_T Ctxs : ctx_names (Scope::EE) (B::BRest) Trans : transS (B::BRest) <unknown I stmt> T Names' @@ SN : stmtNames (B::BRest) <unknown I stmt> [] Names'' Ev : evalStmt FE_T EE_T T EE_T' O @ Trans1 : join (B::BRest) N Trans2 : N |{stmt}- <unknown I stmt> ~~> S'' Trans3 : transS (B::BRest) S'' T Names' ** H1 : is_list is_string N IsS_P : is_stmt S'' H2 : forall K I, mem (K, I) Scope -> mem K B H3 : forall K, mem K B -> exists I, mem (K, I) Scope H4 : ctx_names EE BRest SN_P : stmtNames (B::BRest) S'' [] Ctx' EvP : evalStmt FE (Scope::EE) S'' EE' O Names : names (Scope::EE) N2 IsN1 : is_list is_string N2 Pr : N2 |{stmt}- <unknown I stmt> ~~> S'' H5 : evalStmt FE (Scope::EE) <unknown I stmt> EE'' O H6 : scopes_same EE' EE'' ============================ exists EE', evalStmt FE (Scope::EE) <unknown I stmt> EE' O
< search. Subgoal 3: Variables: A T Names EE EE_T FE FE_T V EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsA : is_args A IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names A T @@ AN : argsNames Names A [] Ev : evalArgs FE_T EE_T T V EE_T' O @ ============================ exists EE', evalArgs FE EE A V EE' O
< Trans: case Trans (keep). Subgoal 3.1: Variables: Names EE EE_T FE FE_T V EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names nilArgs nilArgs @@ AN : argsNames Names nilArgs [] Ev : evalArgs FE_T EE_T nilArgs V EE_T' O @ ============================ exists EE', evalArgs FE EE nilArgs V EE' O
< case Ev. Subgoal 3.1: Variables: Names EE FE FE_T EE_T' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsA : is_args nilArgs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transA Names nilArgs nilArgs @@ AN : argsNames Names nilArgs [] ============================ exists EE', evalArgs FE EE nilArgs [] EE' []
< search. Subgoal 3.2: Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsA : is_args (consArgs E A1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ AN : argsNames Names (consArgs E A1) [] Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** ============================ exists EE', evalArgs FE EE (consArgs E A1) V EE' O
< case IsA. Subgoal 3.2: Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ AN : argsNames Names (consArgs E A1) [] Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 ============================ exists EE', evalArgs FE EE (consArgs E A1) V EE' O
< AN: case AN. Subgoal 3.2: Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E EN AN IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E EN AN1 : argsNames Names A1 AN AN2 : EN ++ AN = [] ============================ exists EE', evalArgs FE EE (consArgs E A1) V EE' O
< case AN2. Subgoal 3.2: Variables: Names EE EE_T FE FE_T V EE_T' O A2 E1 A1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Ev : evalArgs FE_T EE_T (consArgs E1 A2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] ============================ exists EE', evalArgs FE EE (consArgs E A1) V EE' O
< Ev: case Ev. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< apply transE_is to _ _ Trans1. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_expr E1 ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 H6 : ctx_names EE' Names ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< EvA2: apply IH_A to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 3.2: Variables: Names EE EE_T FE FE_T EE_T' O A2 E1 A1 E EE3 O2 O3 VRest V1 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transA Names (consArgs E A1) (consArgs E1 A2) @@ Trans1 : transE Names E E1 ** Trans2 : transA Names A1 A2 ** H1 : is_expr E H2 : is_args A1 AN : exprNames Names E [] AN1 : argsNames Names A1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalArgs FE_T EE3 A2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H3 : is_list (is_list (is_pair is_string is_value)) EE' H4 : is_expr E1 H5 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 H6 : ctx_names EE' Names EvA2 : evalArgs FE EE' A1 VRest EE'1 O3 ============================ exists EE', evalArgs FE EE (consArgs E A1) (V1::VRest) EE' O
< search. Subgoal 4: Variables: RF T Names EE EE_T FE FE_T V EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsRF : is_recFieldExprs RF IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names RF T @@ RFN : recFieldNames Names RF [] Ev : evalRecFields FE_T EE_T T V EE_T' O @ ============================ exists EE', evalRecFields FE EE RF V EE' O
< Trans: case Trans (keep). Subgoal 4.1: Variables: Names EE EE_T FE FE_T V EE_T' O IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names nilRecFieldExprs nilRecFieldExprs @@ RFN : recFieldNames Names nilRecFieldExprs [] Ev : evalRecFields FE_T EE_T nilRecFieldExprs V EE_T' O @ ============================ exists EE', evalRecFields FE EE nilRecFieldExprs V EE' O
< case Ev. Subgoal 4.1: Variables: Names EE FE FE_T EE_T' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsRF : is_recFieldExprs nilRecFieldExprs IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T' IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T' Ctxs : ctx_names EE Names Trans : transRF Names nilRecFieldExprs nilRecFieldExprs @@ RFN : recFieldNames Names nilRecFieldExprs [] ============================ exists EE', evalRecFields FE EE nilRecFieldExprs [] EE' []
< search. Subgoal 4.2: Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsRF : is_recFieldExprs (consRecFieldExprs F E RF1) IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ RFN : recFieldNames Names (consRecFieldExprs F E RF1) [] Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
< case IsRF. Subgoal 4.2: Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ RFN : recFieldNames Names (consRecFieldExprs F E RF1) [] Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
< RFN: case RFN. Subgoal 4.2: Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E EN RN IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E EN RFN1 : recFieldNames Names RF1 RN RFN2 : EN ++ RN = [] ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
< case RFN2. Subgoal 4.2: Variables: Names EE EE_T FE FE_T V EE_T' O RF2 E1 F RF1 E IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Ev : evalRecFields FE_T EE_T (consRecFieldExprs F E1 RF2) V EE_T' O @ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) V EE' O
< Ev: case Ev. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< EvA1: apply IH_E to _ _ _ _ _ _ RFE _ SS Ctxs Trans1 _ Ev. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< apply evalExpr_isCtx to _ _ _ EvA1. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H4 : is_list (is_list (is_pair is_string is_value)) EE' ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< apply transE_is to _ _ Trans1. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E1 ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< apply evalExpr_isCtx to _ _ _ Ev. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< SS': apply trans_evalExpr_relCtxs to _ _ _ _ _ _ _ _ _ Trans1 EvA1 Ev. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< apply evalExpr_trans_ctx_names to _ _ _ _ Ctxs Trans1 EvA1. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 H7 : ctx_names EE' Names ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< EvA2: apply IH_RF to _ _ _ _ _ _ RFE _ SS' _ Trans2 _ Ev1. Subgoal 4.2: Variables: Names EE EE_T FE FE_T EE_T' O RF2 E1 F RF1 E EE3 O2 O3 VRest V1 EE' EE'1 IH_E_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O * -> exists EE', evalExpr FE EE E V EE' O IH_S_E : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O * -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A_E : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O * -> exists EE', evalArgs FE EE A V EE' O IH_RF_E : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O * -> exists EE', evalRecFields FE EE RF V EE' O IH_E : forall E T Names EE EE_T FE FE_T V EE_T' O, is_expr E -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transE Names E T ** -> exprNames Names E [] -> evalExpr FE_T EE_T T V EE_T' O @ -> exists EE', evalExpr FE EE E V EE' O IH_S : forall S T Names Names' Names'' Scope EE EE_T FE FE_T EE_T' O, is_stmt S -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) (Scope::EE) -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same (Scope::EE) EE_T -> ctx_names (Scope::EE) Names -> transS Names S T Names' ** -> stmtNames Names S [] Names'' -> evalStmt FE_T EE_T T EE_T' O @ -> exists EE', evalStmt FE (Scope::EE) S EE' O IH_A : forall A T Names EE EE_T FE FE_T V EE_T' O, is_args A -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transA Names A T ** -> argsNames Names A [] -> evalArgs FE_T EE_T T V EE_T' O @ -> exists EE', evalArgs FE EE A V EE' O IH_RF : forall RF T Names EE EE_T FE FE_T V EE_T' O, is_recFieldExprs RF -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE -> is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T -> is_list (is_list (is_pair is_string is_value)) EE -> is_list (is_list (is_pair is_string is_value)) EE_T -> is_list (is_list is_string) Names -> rel_FE FE FE_T -> emptyNames_FE FE -> scopes_same EE EE_T -> ctx_names EE Names -> transRF Names RF T ** -> recFieldNames Names RF [] -> evalRecFields FE_T EE_T T V EE_T' O @ -> exists EE', evalRecFields FE EE RF V EE' O IsFE : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE IsFE_T : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE_T IsEE : is_list (is_list (is_pair is_string is_value)) EE IsEE_T : is_list (is_list (is_pair is_string is_value)) EE_T IsNames : is_list (is_list is_string) Names RFE : rel_FE FE FE_T ENFE : emptyNames_FE FE SS : scopes_same EE EE_T Ctxs : ctx_names EE Names Trans : transRF Names (consRecFieldExprs F E RF1) (consRecFieldExprs F E1 RF2) @@ Trans1 : transE Names E E1 ** Trans2 : transRF Names RF1 RF2 ** H1 : is_string F H2 : is_expr E H3 : is_recFieldExprs RF1 RFN : exprNames Names E [] RFN1 : recFieldNames Names RF1 [] Ev : evalExpr FE_T EE_T E1 V1 EE3 O2 * Ev1 : evalRecFields FE_T EE3 RF2 VRest EE_T' O3 * Ev2 : O2 ++ O3 = O EvA1 : evalExpr FE EE E V1 EE' O2 H4 : is_list (is_list (is_pair is_string is_value)) EE' H5 : is_expr E1 H6 : is_list (is_list (is_pair is_string is_value)) EE3 SS' : scopes_same EE' EE3 H7 : ctx_names EE' Names EvA2 : evalRecFields FE EE' RF1 VRest EE'1 O3 ============================ exists EE', evalRecFields FE EE (consRecFieldExprs F E RF1) ((F, V1)::VRest) EE' O
< search. Proof completed.
< Extensible_Theorem trans_getFunEvalInfo_backward : forall F F_T Name RetVar RVVal PNames Body_T, IsF : is_fun F -> Trans : transF F F_T -> GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body on Trans. Subgoal 1: Variables: Name RetVar RVVal PNames Body_T PTys Names Names1 Body1 Params InitVal RetVar1 RetTy F1 Body IH : forall F F_T Name RetVar RVVal PNames Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body IsF : is_fun (fun F1 RetTy RetVar1 InitVal Params Body) Trans : transF (fun F1 RetTy RetVar1 InitVal Params Body) (fun F1 RetTy RetVar1 InitVal Params Body1) @ GFEI : getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body1) Name RetVar RVVal PNames Body_T Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar1::Names] Body Body1 Names1 ============================ exists Body1, getFunEvalInfo (fun F1 RetTy RetVar1 InitVal Params Body) Name RetVar RVVal PNames Body1
< GFEI: case GFEI. Subgoal 1: Variables: Name RetVar RVVal PNames Body_T PTys Names Names1 Params RetTy Body IH : forall F F_T Name RetVar RVVal PNames Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body IsF : is_fun (fun Name RetTy RetVar RVVal Params Body) Trans : transF (fun Name RetTy RetVar RVVal Params Body) (fun Name RetTy RetVar RVVal Params Body_T) @ Trans1 : paramTys Params PTys Trans2 : domain PTys Names Trans3 : transS [RetVar::Names] Body Body_T Names1 GFEI : paramNames Params PNames ============================ exists Body1, getFunEvalInfo (fun Name RetTy RetVar RVVal Params Body) Name RetVar RVVal PNames Body1
< search. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body_T F_P IH : forall F F_T Name RetVar RVVal PNames Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * ============================ exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
< apply proj_fun_is to Trans1 _. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body_T F_P IH : forall F F_T Name RetVar RVVal PNames Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * H1 : is_fun F_P ============================ exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
< G: apply IH to _ Trans2 GFEI. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body_T F_P Body IH : forall F F_T Name RetVar RVVal PNames Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * H1 : is_fun F_P G : getFunEvalInfo F_P Name RetVar RVVal PNames Body ============================ exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
< apply proj_getFunEvalInfo_back to Trans1 _ G. Subgoal 2: Variables: F_T Name RetVar RVVal PNames Body_T F_P Body IH : forall F F_T Name RetVar RVVal PNames Body_T, is_fun F -> transF F F_T * -> getFunEvalInfo F_T Name RetVar RVVal PNames Body_T -> exists Body, getFunEvalInfo F Name RetVar RVVal PNames Body IsF : is_fun <unknown I fun> Trans : transF <unknown I fun> F_T @ GFEI : getFunEvalInfo F_T Name RetVar RVVal PNames Body_T Trans1 : |{fun}- <unknown I fun> ~~> F_P Trans2 : transF F_P F_T * H1 : is_fun F_P G : getFunEvalInfo F_P Name RetVar RVVal PNames Body H2 : getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body ============================ exists Body, getFunEvalInfo <unknown I fun> Name RetVar RVVal PNames Body
< search. Proof completed.
< Theorem trans_getFunEvalCtx_backward : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE. ============================ forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE
< induction on 2. IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE ============================ forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T @ -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE
< intros IsFs Trans GFEI. Variables: Fs Fs_T FE_T IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE IsFs : is_list is_fun Fs Trans : transFuns Fs Fs_T @ GFEI : getFunEvalCtx Fs_T FE_T ============================ exists FE, getFunEvalCtx Fs FE
< Trans: case Trans. Subgoal 1: Variables: FE_T IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE IsFs : is_list is_fun [] GFEI : getFunEvalCtx [] FE_T ============================ exists FE, getFunEvalCtx [] FE
< case GFEI. Subgoal 1: IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE IsFs : is_list is_fun [] ============================ exists FE, getFunEvalCtx [] FE
< search. Subgoal 2: Variables: FE_T Rest1 F1 Rest F IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE IsFs : is_list is_fun (F::Rest) GFEI : getFunEvalCtx (F1::Rest1) FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * ============================ exists FE, getFunEvalCtx (F::Rest) FE
< case IsFs. Subgoal 2: Variables: FE_T Rest1 F1 Rest F IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE GFEI : getFunEvalCtx (F1::Rest1) FE_T Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest ============================ exists FE, getFunEvalCtx (F::Rest) FE
< G: case GFEI. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F1 FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest1 CRest ============================ exists FE, getFunEvalCtx (F::Rest) FE
< apply IH to _ Trans1 G1. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F1 FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest1 CRest H3 : getFunEvalCtx Rest FE ============================ exists FE, getFunEvalCtx (F::Rest) FE
< apply trans_getFunEvalInfo_backward to _ Trans G. Subgoal 2: Variables: Rest1 F1 Rest F CRest Body PNames RVVal RetVar FName FE Body1 IH : forall Fs Fs_T FE_T, is_list is_fun Fs -> transFuns Fs Fs_T * -> getFunEvalCtx Fs_T FE_T -> exists FE, getFunEvalCtx Fs FE Trans : transF F F1 Trans1 : transFuns Rest Rest1 * H1 : is_fun F H2 : is_list is_fun Rest G : getFunEvalInfo F1 FName RetVar RVVal PNames Body G1 : getFunEvalCtx Rest1 CRest H3 : getFunEvalCtx Rest FE H4 : getFunEvalInfo F FName RetVar RVVal PNames Body1 ============================ exists FE, getFunEvalCtx (F::Rest) FE
< search. Proof completed.
< Theorem getFunEvalCtx_funsEmptyNames_emptyNames_FE : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE -> funsEmptyNames Fs -> emptyNames_FE FE. ============================ forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE -> funsEmptyNames Fs -> emptyNames_FE FE
< induction on 2. IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE ============================ forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE @ -> funsEmptyNames Fs -> emptyNames_FE FE
< intros IsFs GFEC FEN. Variables: Fs FE IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE IsFs : is_list is_fun Fs GFEC : getFunEvalCtx Fs FE @ FEN : funsEmptyNames Fs ============================ emptyNames_FE FE
< GFEC: case GFEC. Subgoal 1: IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE IsFs : is_list is_fun [] FEN : funsEmptyNames [] ============================ emptyNames_FE []
< unfold . Subgoal 1: IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE IsFs : is_list is_fun [] FEN : funsEmptyNames [] ============================ forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) [] -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames
< intros M. Subgoal 1: Variables: F RetVar RVVal Params Body IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE IsFs : is_list is_fun [] FEN : funsEmptyNames [] M : mem (F, (RetVar, (RVVal, (Params, Body)))) [] ============================ exists EndNames, stmtNames [RetVar::Params] Body [] EndNames
< case M. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE IsFs : is_list is_fun (F::FRest) FEN : funsEmptyNames (F::FRest) GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * ============================ emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
< FEN: case FEN. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE IsFs : is_list is_fun (F::FRest) GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN : funEmptyNames F FEN1 : funsEmptyNames FRest ============================ emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
< case IsFs. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN : funEmptyNames F FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest ============================ emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
< EN: apply IH to _ GFEC1 FEN1. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN : funEmptyNames F FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : emptyNames_FE CRest ============================ emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
< EN: case EN. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN : funEmptyNames F FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames ============================ emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
< FEN: case FEN. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut ============================ emptyNames_FE ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest)
< unfold . Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut ============================ forall F RetVar1 RVVal1 Params Body1, mem (F, (RetVar1, (RVVal1, (Params, Body1)))) ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) -> exists EndNames, stmtNames [RetVar1::Params] Body1 [] EndNames
< intros M. Subgoal 2: Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut F1 RetVar2 RVVal2 Params1 Body2 IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut M : mem (F1, (RetVar2, (RVVal2, (Params1, Body2)))) ((FName, (RetVar, (RVVal, (PNames, Body))))::CRest) ============================ exists EndNames, stmtNames [RetVar2::Params1] Body2 [] EndNames
< M: case M. Subgoal 2.1: Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut ============================ exists EndNames, stmtNames [RetVar::PNames] Body [] EndNames
< apply getFunEvalInfo_unique to _ GFEC FEN. Subgoal 2.1: Variables: CRest FRest F Name RetVar1 RVVal1 Params Body1 NamesOut IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut ============================ exists EndNames, stmtNames [RetVar1::Params] Body1 [] EndNames
< search. Subgoal 2.2: Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut F1 RetVar2 RVVal2 Params1 Body2 IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut M : mem (F1, (RetVar2, (RVVal2, (Params1, Body2)))) CRest ============================ exists EndNames, stmtNames [RetVar2::Params1] Body2 [] EndNames
< apply EN to M. Subgoal 2.2: Variables: CRest Body PNames RVVal RetVar FName FRest F Name RetVar1 RVVal1 Params Body1 NamesOut F1 RetVar2 RVVal2 Params1 Body2 EndNames IH : forall Fs FE, is_list is_fun Fs -> getFunEvalCtx Fs FE * -> funsEmptyNames Fs -> emptyNames_FE FE GFEC : getFunEvalInfo F FName RetVar RVVal PNames Body GFEC1 : getFunEvalCtx FRest CRest * FEN1 : funsEmptyNames FRest H1 : is_fun F H2 : is_list is_fun FRest EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) CRest -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames FEN : getFunEvalInfo F Name RetVar1 RVVal1 Params Body1 FEN2 : stmtNames [RetVar1::Params] Body1 [] NamesOut M : mem (F1, (RetVar2, (RVVal2, (Params1, Body2)))) CRest H3 : stmtNames [RetVar2::Params1] Body2 [] EndNames ============================ exists EndNames, stmtNames [RetVar2::Params1] Body2 [] EndNames
< search. Proof completed.
< Extensible_Theorem trans_evalProgram_backward : forall P P_T A O, IsP : is_program P -> IsA : is_list is_value A -> PEN : programEmptyNames P -> Trans : transP P P_T -> Ev : evalProgram A P_T O -> evalProgram A P O on Trans. Subgoal 1: Variables: A O Main1 Funs1 Main Funs IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program (program Funs Main) IsA : is_list is_value A PEN : programEmptyNames (program Funs Main) Trans : transP (program Funs Main) (program Funs1 Main1) @ Ev : evalProgram A (program Funs1 Main1) O Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 ============================ evalProgram A (program Funs Main) O
< case IsP. Subgoal 1: Variables: A O Main1 Funs1 Main Funs IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A PEN : programEmptyNames (program Funs Main) Trans : transP (program Funs Main) (program Funs1 Main1) @ Ev : evalProgram A (program Funs1 Main1) O Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main ============================ evalProgram A (program Funs Main) O
< Ev: case Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A PEN : programEmptyNames (program Funs Main) Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O ============================ evalProgram A (program Funs Main) O
< PEN: case PEN. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main ============================ evalProgram A (program Funs Main) O
< apply transFuns_is to _ Trans1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 ============================ evalProgram A (program Funs Main) O
< apply transF_is to _ Trans2. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 ============================ evalProgram A (program Funs Main) O
< GFEC: apply trans_getFunEvalCtx_backward to _ Trans1 Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE ============================ evalProgram A (program Funs Main) O
< GFEI: apply trans_getFunEvalInfo_backward to _ Trans2 Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 ============================ evalProgram A (program Funs Main) O
< RFE: apply trans_getFunEvalCtx_rel_FE to _ Trans1 GFEC Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx ============================ evalProgram A (program Funs Main) O
< Tr: apply trans_getFunEvalInfo_rel to _ Trans2 GFEI Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N ============================ evalProgram A (program Funs Main) O
< RFE': assert rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx). Subgoal 1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N ============================ rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx)
< unfold . Subgoal 1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N ============================ forall F RetVar1 RVVal PNames1 Body2, lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) -> exists Body_T Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< intros L. Subgoal 1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) ============================ exists Body_T Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< L: case L. Subgoal 1.1.1.1: Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE N F RetVar1 RVVal PNames1 Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body Ev2 : zip PNames1 A InitEnv Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body2 RFE : rel_FE FE FCtx Tr : transS [RetVar1::PNames1] Body2 Body N ============================ exists Body_T Names, lookup ((F, (RetVar1, (RVVal, (PNames1, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< search. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N L : MainName = F -> false L1 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2))) ============================ exists Body_T Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< R: case RFE. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 Tr : transS [RetVar::PNames] Body1 Body N L : MainName = F -> false L1 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2))) R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body_T Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< apply R to L1. Subgoal 1.1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body2 Body_T Names IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 Tr : transS [RetVar::PNames] Body1 Body N L : MainName = F -> false L1 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2))) R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H5 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T))) H6 : transS [RetVar1::PNames1] Body2 Body_T Names ============================ exists Body_T Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< search. Subgoal 1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N ============================ forall F RetVar1 RVVal PNames1 Body_T, lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) -> exists Body2 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< intros L. Subgoal 1.1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N L : lookup ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) F (RetVar1, (RVVal, (PNames1, Body_T))) ============================ exists Body2 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< L: case L. Subgoal 1.1.2.1: Variables: A O Main1 Funs1 Main Funs FCtx InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 F RetVar1 RVVal PNames1 Body_T Ev2 : zip PNames1 A InitEnv Ev3 : evalStmt ((F, (RetVar1, (RVVal, (PNames1, Body_T))))::FCtx) [(RetVar1, RVVal)::InitEnv] Body_T EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main F RetVar1 RVVal PNames1 Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar1::PNames1] Body1 Body_T N ============================ exists Body2 Names, lookup ((F, (RetVar1, (RVVal, (PNames1, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< search. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T))) ============================ exists Body2 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< R: case RFE. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 Tr : transS [RetVar::PNames] Body1 Body N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T))) R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names ============================ exists Body2 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< apply R1 to L1. Subgoal 1.1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal PNames1 Body_T Body2 Names IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 Tr : transS [RetVar::PNames] Body1 Body N L : MainName = F -> false L1 : lookup FCtx F (RetVar1, (RVVal, (PNames1, Body_T))) R : forall F RetVar RVVal PNames Body, lookup FE F (RetVar, (RVVal, (PNames, Body))) -> exists Body_T Names, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) /\ transS [RetVar::PNames] Body Body_T Names R1 : forall F RetVar RVVal PNames Body_T, lookup FCtx F (RetVar, (RVVal, (PNames, Body_T))) -> exists Body Names, lookup FE F (RetVar, (RVVal, (PNames, Body))) /\ transS [RetVar::PNames] Body Body_T Names H5 : lookup FE F (RetVar1, (RVVal, (PNames1, Body2))) H6 : transS [RetVar1::PNames1] Body2 Body_T Names ============================ exists Body2 Names, lookup ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) F (RetVar1, (RVVal, (PNames1, Body2))) /\ transS [RetVar1::PNames1] Body2 Body_T Names
< search. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) ============================ evalProgram A (program Funs Main) O
< EN: apply getFunEvalCtx_funsEmptyNames_emptyNames_FE to _ GFEC PEN. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE ============================ evalProgram A (program Funs Main) O
< EN': assert emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE). Subgoal 1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE ============================ emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE)
< unfold . Subgoal 1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE ============================ forall F RetVar1 RVVal Params Body, mem (F, (RetVar1, (RVVal, (Params, Body)))) ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) -> exists EndNames, stmtNames [RetVar1::Params] Body [] EndNames
< intros M. Subgoal 1.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ============================ exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
< M: case M. Subgoal 1.2.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE ============================ exists EndNames, stmtNames [RetVar::PNames] Body1 [] EndNames
< FEN: case PEN1. Subgoal 1.2.1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N Name RetVar2 RVVal1 Params1 Body3 NamesOut IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE FEN : getFunEvalInfo Main Name RetVar2 RVVal1 Params1 Body3 FEN1 : stmtNames [RetVar2::Params1] Body3 [] NamesOut ============================ exists EndNames, stmtNames [RetVar::PNames] Body1 [] EndNames
< apply getFunEvalInfo_unique to _ GFEI FEN. Subgoal 1.2.1: Variables: A O Main1 Funs1 Main Funs FCtx Body InitEnv EE FE N Name RetVar2 RVVal1 Params1 Body3 NamesOut IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 Name RetVar2 RVVal1 Params1 Body Ev2 : zip Params1 A InitEnv Ev3 : evalStmt ((Name, (RetVar2, (RVVal1, (Params1, Body))))::FCtx) [(RetVar2, RVVal1)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main Name RetVar2 RVVal1 Params1 Body3 RFE : rel_FE FE FCtx Tr : transS [RetVar2::Params1] Body3 Body N RFE' : rel_FE ((Name, (RetVar2, (RVVal1, (Params1, Body3))))::FE) ((Name, (RetVar2, (RVVal1, (Params1, Body))))::FCtx) EN : emptyNames_FE FE FEN : getFunEvalInfo Main Name RetVar2 RVVal1 Params1 Body3 FEN1 : stmtNames [RetVar2::Params1] Body3 [] NamesOut ============================ exists EndNames, stmtNames [RetVar2::Params1] Body3 [] EndNames
< search. Subgoal 1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) FE ============================ exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
< EN: case EN. Subgoal 1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) FE EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames ============================ exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
< apply EN to M. Subgoal 1.2.2: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N F RetVar1 RVVal Params Body2 EndNames IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) M : mem (F, (RetVar1, (RVVal, (Params, Body2)))) FE EN : forall F RetVar RVVal Params Body, mem (F, (RetVar, (RVVal, (Params, Body)))) FE -> exists EndNames, stmtNames [RetVar::Params] Body [] EndNames H5 : stmtNames [RetVar1::Params] Body2 [] EndNames ============================ exists EndNames, stmtNames [RetVar1::Params] Body2 [] EndNames
< search. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ============================ evalProgram A (program Funs Main) O
< apply getFunEvalInfo_is to _ Ev1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body ============================ evalProgram A (program Funs Main) O
< Z: assert zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv). Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) ============================ evalProgram A (program Funs Main) O
< IsIE: apply zip_is to _ _ Z. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) ============================ evalProgram A (program Funs Main) O
< apply getFunEvalCtx_is to _ Ev. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx ============================ evalProgram A (program Funs Main) O
< IsInitEnv: assert is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv]. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] ============================ evalProgram A (program Funs Main) O
< SS: apply scopes_same_reflexive to IsInitEnv. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] ============================ evalProgram A (program Funs Main) O
< Ctxs: apply zip_ctx_names to Z. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs PEN1 : funEmptyNames Main H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] ============================ evalProgram A (program Funs Main) O
< FEN: case PEN1. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N Name RetVar1 RVVal Params Body2 NamesOut IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] FEN : getFunEvalInfo Main Name RetVar1 RVVal Params Body2 FEN1 : stmtNames [RetVar1::Params] Body2 [] NamesOut ============================ evalProgram A (program Funs Main) O
< apply getFunEvalInfo_unique to _ FEN GFEI. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut ============================ evalProgram A (program Funs Main) O
< apply getFunEvalCtx_is to _ GFEC. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut H11 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE ============================ evalProgram A (program Funs Main) O
< apply getFunEvalInfo_is to _ GFEI. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut H11 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE H12 : is_string MainName H13 : is_string RetVar H14 : is_value RetVal H15 : is_list is_string PNames H16 : is_stmt Body1 ============================ evalProgram A (program Funs Main) O
< apply trans_evalStmt_backward to _ _ _ _ _ _ RFE' EN' SS Ctxs Tr FEN1 Ev3. Subgoal 1: Variables: A O Main1 Funs1 Main Funs FCtx MainName RetVar RetVal PNames Body InitEnv EE FE Body1 N NamesOut EE' IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsA : is_list is_value A Trans : transP (program Funs Main) (program Funs1 Main1) @ Trans1 : transFuns Funs Funs1 Trans2 : transF Main Main1 H1 : is_list is_fun Funs H2 : is_fun Main Ev : getFunEvalCtx Funs1 FCtx Ev1 : getFunEvalInfo Main1 MainName RetVar RetVal PNames Body Ev2 : zip PNames A InitEnv Ev3 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) [(RetVar, RetVal)::InitEnv] Body EE O PEN : funsEmptyNames Funs H3 : is_list is_fun Funs1 H4 : is_fun Main1 GFEC : getFunEvalCtx Funs FE GFEI : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 RFE : rel_FE FE FCtx Tr : transS [RetVar::PNames] Body1 Body N RFE' : rel_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) ((MainName, (RetVar, (RetVal, (PNames, Body))))::FCtx) EN : emptyNames_FE FE EN' : emptyNames_FE ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) H5 : is_string MainName H6 : is_string RetVar H7 : is_value RetVal H8 : is_list is_string PNames H9 : is_stmt Body Z : zip (RetVar::PNames) (RetVal::A) ((RetVar, RetVal)::InitEnv) IsIE : is_list (is_pair is_string is_value) ((RetVar, RetVal)::InitEnv) H10 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FCtx IsInitEnv : is_list (is_list (is_pair is_string is_value)) [(RetVar, RetVal)::InitEnv] SS : scopes_same [(RetVar, RetVal)::InitEnv] [(RetVar, RetVal)::InitEnv] Ctxs : ctx_names [(RetVar, RetVal)::InitEnv] [RetVar::PNames] FEN : getFunEvalInfo Main MainName RetVar RetVal PNames Body1 FEN1 : stmtNames [RetVar::PNames] Body1 [] NamesOut H11 : is_list (is_pair is_string (is_pair is_string (is_pair is_value (is_pair (is_list is_string) is_stmt)))) FE H12 : is_string MainName H13 : is_string RetVar H14 : is_value RetVal H15 : is_list is_string PNames H16 : is_stmt Body1 H17 : evalStmt ((MainName, (RetVar, (RetVal, (PNames, Body1))))::FE) [(RetVar, RetVal)::InitEnv] Body1 EE' O ============================ evalProgram A (program Funs Main) O
< search. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program <unknown I program> IsA : is_list is_value A PEN : programEmptyNames <unknown I program> Trans : transP <unknown I program> P_T @ Ev : evalProgram A P_T O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * ============================ evalProgram A <unknown I program> O
< PEN: case PEN. Subgoal 2: Variables: P_T A O P_P P_P1 IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A P_T O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * PEN : |{program}- <unknown I program> ~~> P_P1 PEN1 : programEmptyNames P_P1 ============================ evalProgram A <unknown I program> O
< apply proj_program_unique to PEN Trans1 _. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A P_T O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * PEN : |{program}- <unknown I program> ~~> P_P PEN1 : programEmptyNames P_P ============================ evalProgram A <unknown I program> O
< apply proj_program_is to PEN _. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A P_T O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * PEN : |{program}- <unknown I program> ~~> P_P PEN1 : programEmptyNames P_P H1 : is_program P_P ============================ evalProgram A <unknown I program> O
< EvP: apply IH to _ _ PEN1 Trans2 Ev. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A P_T O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * PEN : |{program}- <unknown I program> ~~> P_P PEN1 : programEmptyNames P_P H1 : is_program P_P EvP : evalProgram A P_P O ============================ evalProgram A <unknown I program> O
< apply proj_evalProgram_back to PEN _ _ EvP. Subgoal 2: Variables: P_T A O P_P IH : forall P P_T A O, is_program P -> is_list is_value A -> programEmptyNames P -> transP P P_T * -> evalProgram A P_T O -> evalProgram A P O IsP : is_program <unknown I program> IsA : is_list is_value A Trans : transP <unknown I program> P_T @ Ev : evalProgram A P_T O Trans1 : |{program}- <unknown I program> ~~> P_P Trans2 : transP P_P P_T * PEN : |{program}- <unknown I program> ~~> P_P PEN1 : programEmptyNames P_P H1 : is_program P_P EvP : evalProgram A P_P O H2 : evalProgram A <unknown I program> O ============================ evalProgram A <unknown I program> O
< search. Proof completed.